Problem mit Python3 - lesen einer Datei

Gast #6987170
Lesenswert?

Ich kämpfe gerade mit Python3, ich will eine Datei mit IP-Nummern 
zeilenweise einlesen.

Das Programm:
1
#!/usr/bin/python3
2

3
import os
4

5
ip0 = open('ip.txt','r')
6

7
for line in ip0:
8
  ip = ip0.readline()
9
  ip = ip.strip('\n')
10
  print(ip)
11
ip0.close()

Die IP-Nummern (Datei ip.txt):
1
1.15.86.71
2
1.15.115.15
3
1.15.119.13
4
1.15.149.18
5
1.15.150.204
6
1.116.19.115
7
1.116.76.185
8
1.116.97.92
9
1.116.101.225
10
1.116.104.25
11
1.116.118.153
12
1.116.239.130
13
1.117.69.54
14
1.117.202.57
15
1.179.186.174
16
1.221.147.163
17
1.234.58.144
18
2.39.147.86
19
2.42.138.122
20
2.59.156.104

Die Ausgabe:
1
1.15.115.15
2
1.15.149.18
3
1.116.19.115
4
1.116.97.92
5
1.116.104.25
6
1.116.239.130
7
1.117.202.57
8
1.221.147.163
9
2.39.147.86
10
2.59.156.104

Es werden also nur die Zeilen mit geraden Zeilennummern eingelesen.
Habt ihr einen Tip für mich?
Gast #6987197
Lesenswert?

Wir hätten auch noch:
1
#!/usr/bin/env python
2
# -*- coding: utf-8 -*-
3

4
ip0 = open('/tmp/ip.txt','r')
5
for line in ip0:
6
    ip = line.strip('\n')
7
    print(ip)
8
ip0.close()
9

10
# oder
11

12
with open('/tmp/ip.txt','r') as ip0:
13
    for line in ip0:
14
        ip = line.strip('\n')
15
        print(ip)
16
    # automatisches close
17

18
# oder
19

20
with open('/tmp/ip.txt','r') as ip0:
21
    ip_list = [line.strip() for line in ip0]
22
    for line in ip_list:
23
        print(ip)
24

25
# oder
26

27
with open('/tmp/ip.txt','r') as ip0:
28
    [print(line.strip()) for line in ip0]
Gast #6987938
Lesenswert?

Na ja, kann man machen. Muss man aber nicht.
›open()‹ produziert in diesem Fall ein Dateiobjekt des Typs 
TextIOWrapper.
Das ist eine Unterklasse von TextIOBase, die wiederum ist eine 
Unterklasse von IOBase.
IOBase produziert automagisch einen Iterator der Zeilen übergibt.
Man kann also problemlos über das Dateiobjekt iterieren und bekommt 
Zeilen die mit ›universal newlines‹ getrennt werden.
Wenn man etwas anderes will als Zeilen, dann muss man's explizit 
programmieren. 'r' kann man sich auch sparen, ist default.
1
with open('/tmp/ip.txt') as fileobject:
2
    for line in fileobject:
3
        print(line.strip('\n'))
Gast #6988609
Lesenswert?

sp103 schrieb:
> Schont eure Admins! Die können nix für, wenn die Poster die
> Schlange
> nicht erwähnen...

Wertvoller Hinweis, testen wir gleich einmal:
1
#!/usr/bin/env python
2
# -*- coding: utf-8 -*-
3
try:
4
  print("Mal seh'n")
5
except:
6
  print('Verdammt')
Der Code Tag braucht also ein Shebang…

Danke!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren