Forum: PC-Programmierung Problem mit Python3 - lesen einer Datei


von python-newbie (Gast)


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?

von Norbert (Gast)


Lesenswert?

Klar,
die erste,dritte,fünfte Zeile ist jeweils in ›line‹
Die for Schleife liest schon alles, kein Grund für ein readline()

von python-newbie (Gast)


Lesenswert?

1
for ip in ip0:
2
3
  ip = ip.strip('\n')
4
  print(ip)
5
6
ip0.close()

funktioniert perfekt. Danke!

von Norbert (Gast)


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]

von A. S. (rava)


Lesenswert?

üblich wäre wohl
1
with open('ip.txt','r') as fp:
2
    for line in fp.readlines():
3
        print(line.strip('\n'))

: Bearbeitet durch User
von Norbert (Gast)


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'))

von Norbert (Gast)


Lesenswert?

Was macht das Board, warum ist code nicht bunt?

von Russenhocke (Gast)


Lesenswert?

Norbert schrieb:
> warum ist code nicht bunt?

Admin muss erst farbige Tinte auffüllen.

von sp103 (Gast)


Lesenswert?

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

von Norbert (Gast)


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!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.