Forum: PC-Programmierung Python text Datei einlesen und Zeilenweise auswerten


von Sebastian (Gast)


Lesenswert?

Hi,

wie kann ich in Python eine Textdatei einlesen und für jede Zeile 
auswerten. Jede Zeile ist nur ein Name


Einlesen würde ich so:
1
fobj = open("yellow_snow.txt")
2
for line in fobj:
3
    print line.rstrip()
4
fobj.close()


Wie kann ich jetzt sagen, dass jede Zeile String +1 werden soll? Und 
anschliessend automatisert auf Anzahl der importierten "Namen" immer das 
selbe script ausführen soll?

Bsp: print (string_from_txt) # Zeile 1 bis Ende Textfile jedesmal das 
Script ausführen

: Gesperrt durch Moderator
von Tom (Gast)


Lesenswert?

Die Frage ist für alle, die nicht in Deinem Kopf stecken, ziemlich 
konfus ;)

> dass jede Zeile String +1 werden soll
Hast Du ein Beispiel dafür?

von Sebastian (Gast)


Lesenswert?

Tom schrieb:
> Die Frage ist für alle, die nicht in Deinem Kopf stecken, ziemlich
> konfus ;)

Ich versuche es mal ;)


Die Textdatei sieht so aus, jeder Name eine eigene Zeile.
1
Meier
2
Schmidt
3
Müller


Ich möchte diese Textdatei einlesen und das Script für jede Zeile erneut 
ausführen lassen.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Sowas wie:
1
while read line
2
do
3
   script "$line"
4
done < $filename

?

von Sven B. (scummos)


Lesenswert?

1
def func(line):
2
  ...
3
  return ret
4
5
with open("foo.txt", "r") as fp:
6
  for line in fp:
7
    func(line)

von Sebastian (Gast)


Lesenswert?

Sorry, aber ich verstehe es gerade garnicht :-(
1
with open('yellow_snow.txt') as fp:
2
    for line in fp:
3
        print (line.rstrip())
4
        
5
        
6
print ('Herr '+line+' ist im Raum')


Als Eingabedatei steht:
Meier
Schmidt
Müller


Und jetzt sollte die Ausgabe erfolgen:

Herr Meier ist im Raum
Herr Schmidt ist im Raum
Herr Müller ist im Raum


Wie bringe ich dem script bei, dass er jedesmal

print ('Herr '+line+' ist im Raum')

ausführt, bis alle Zeilen aus der yellow_snow.txt einmal ausgeführt 
wurden. Und eben nach jeder Zeile die nächste nimmt?

von BB84 (Gast)


Lesenswert?

print ('Herr '+(line.rstrip())+' ist im Raum') ?

von Rolf M. (rmagnus)


Lesenswert?

Sebastian schrieb:
> Sorry, aber ich verstehe es gerade garnicht :-(

Und ich dein Problem nicht. Geht es dir tatsächlich einfach darum, wie 
du etwas für jede Zeile einmal aufrufst? Das tust du doch bereits:

> with open('yellow_snow.txt') as fp:
>     for line in fp:
>         print (line.rstrip())
          ^^^^^^^^^^^^^^^^^^^^^

Wenn du jetzt stattdessen das da für jede Zeile ausführen willst:

> print ('Herr '+line+' ist im Raum')

Dann mußt du das eben so hinschreiben:

with open('yellow_snow.txt') as fp:
    for line in fp:
        print ('Herr '+line+' ist im Raum')

von Sebastian (Gast)


Lesenswert?

Hi,

bei mir ist das so, dass immer nur die erste Zeile aus der importierten 
Datei verwendet wird. Aber dafür wird die Abgfrage direkt 13x 
durchgeführt
1
# coding: utf-8
2
from bs4 import BeautifulSoup 
3
from urllib.request import urlopen
4
5
list_price_de = []
6
7
fobj = open("import.txt")
8
for Shopname in fobj:
9
        
10
    line_count = len(fobj.readlines())
11
  
12
13
14
for ergebnis in Shopname:
15
   
16
    print(Shopname.rstrip())
17
  
18
19
    soup = BeautifulSoup (urlopen("http://www.ebay.de/sch/m.html?_nkw=&_armrs=1&_from=&_clu=2&_fcid=77&_localstpos=&_stpos=&gbr=1&LH_ItemCondition=3&_ssn="+Shopname.rstrip()+"&_ipg=25&_sop=12"), "html.parser")
20
    results = soup.find_all("li", {"class": "lvprice"})
21
    for result in results:
22
        result1 = result.get_text().strip()
23
        result1 = result1.replace('EUR',' ')
24
        list_price_de.append(result1)  
25
        print (result1)
26
else:
27
28
   print("Finally")
29
   
30
fobj.close()

von lehrer (Gast)


Lesenswert?

...wie wäre es denn, wenn du erst einmal versucht einen Sachverhalt 
eindeutig und verständlich zu erläutern, bevor du anfängst, Programme 
schreiben zu wollen?

von Tom (Gast)


Lesenswert?

Oweh, gleich kommt der Fanclub der geschweiften Klammer...

Erst rattert die erste Schleife durch und es wird sinnlos die Länge der 
Datei berechnet:
1
for Shopname in fobj:
2
    line_count = len(fobj.readlines())
Das funktioniert aber nicht, da man readlines() nicht sinnvoll zweimal 
auf der gleichen Datei aufrufen darf.
Weil readlines() den Filepointer aufs Ende setzt, ist die for-Schleife 
nach dem ersten Mal vorbei und Shopname behält den Wert der ersten 
Zeile.


Jetzt wird für jedes Zeichen in Shopname die folgende Schleife 
aufgerufen:
1
for ergebnis in Shopname:
2
    print(Shopname.rstrip())
3
    soup = BeautifulSoup (urlopen("http:/ .......
4
    results = soup.find_all("li", {"class": "lvprice"})
5
    for result in results:
6
        result1 = result.get_text().strip()
7
        result1 = result1.replace('EUR',' ')
8
        list_price_de.append(result1)  
9
        print (result1)
Die Variable ergebnis kommt gar nicht vor. Je nachdem, wie viele Zeichen 
Shopname hat, wird diese Schleife also mit gleichem Inhalt+Ergebnis 
wiederholt.



Wie der Lehrer schrieb: Ohne ein paar Grundlagen geht es nicht. Das 
Zusammenkopieren von unverstandenen Beispielen überlässt man besser den 
12jährigen PHP-Programmierern.

Wenn Schleifenkonstruktionen etc. nicht klar sind, erstmal alles 
überflüssige (beautifulsoup) rauswerfen und Minimalbeispiele mit print 
bauen. Bevor print nicht das gewünschte ausgibt, muss man an urlopen gar 
nicht denken.
1
#!/usr/bin/python3
2
fobj = open('zeilen.txt', 'r')
3
for line in fobj:
4
    print('in der Schleife: ' + line.strip())
5
    foo = fobj.readlines()  # diese Zeile mal auskommentieren
6
# Welchen Wert hat line jetzt?
7
print('Ende:' + line.strip())
Bevor man den Onlinehandel revolutioniert, erstmal ein paar 
Python-Tutorials durcharbeiten und verstehen. Mindestens die Schleifen 
muss man verstanden haben, wenn man irgendwas machen will, das über 
Hello World hinausgeht.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Wenn du das noch ohne persönliche Angriffe formulieren könntest, würde
das sicher die Akzeptanz deutlich erhöhen.

von Peter (Gast)


Lesenswert?

Null Ahnung aber Daten scrappen wollen!

von pyFan (Gast)


Lesenswert?

Peter schrieb:
> Null Ahnung aber Daten scrappen wollen!

+1

von Rolf M. (rmagnus)


Lesenswert?


Beitrag #6111705 wurde von einem Moderator gelöscht.
Dieser Beitrag ist gesperrt und kann nicht beantwortet werden.