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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.