wie die Ausgabe jeder Zeile einer Datei in python
if data.find('!masters') != -1:
f = open('masters.txt')
lines = f.readline()
for line in lines:
print lines
sck.send('PRIVMSG ' + chan + " " + str(lines) + '\r\n')
f.close()
masters.txt eine Liste der Spitznamen, wie kann ich drucken Sie jede Zeile aus der Datei auf einmal?. Der code, den ich habe, druckt nur die ersten Spitznamen. Eure Hilfe wird es zu schätzen wissen. Danke.
- Sollte
f.close()
werden außerhalb der for-Schleife? Auch, nurfor line in open('masters.txt'):
tun sollte. - umm, das funktioniert nicht, es hält den Druck aus der ersten Zeile etwa 5 mal
- Das ist, weil Ihr code liest nur eine Zeile-nur ein Anruf
readline()
gemacht wird.lines
enthält nur eine Zeile (die einen trailing newline drauf, BTW). Ein weiteres problem ist, dass, nachdem Sieprint
undsck.send()
dass einzelne Linie inlines
ersten mal, schließen Sie die Datei, so können Sie nicht mehr Lesen von ihm, wenn Sie versucht. Diefor
wird jedoch versuchen, die Ausführung für jedes Zeichen in der Linie aberprint
ing undsck.send()
ing selben Zeile über und über, bis oder es sei denn, ein Fehler tritt auf.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erstens, wie @l33tnerd sagte
f.close
sollte außerhalb der for-Schleife.Zweitens, sind Sie nur aufrufen
readline
einmal vor der Schleife. Das liest nur die erste Zeile. Der trick ist, dass in Python-Dateien handeln, wie Iteratoren, so dass Sie können Durchlaufen Sie die Datei ohne zu rufen die Methoden auf, und geben Sie eine Zeile pro iteration:Schließlich, Sie wurden unter Bezugnahme auf die variable
lines
innerhalb der Schleife; ich nehme an, Sie soll findenline
.Edit: Oh, und Sie müssen Gedankenstrich die Inhalte der
if
- Anweisung.print line
sollte ein Komma am Ende zu vermeiden, Doppel-Abstand.sck.send()
wahrscheinlich nicht brauchen eine'\r\n'
am Ende.sck.send
Tat. Sie nicht wirklich brauchen, dasstr
entweder. So sollte es einfach seinsck.send('PRIVMSG ' + chan + " " + line)
oder noch bessersck.send("PRIVMSG %d %s" % (chan, line))
.sck.send("PRIVMSG {0} {1}".format(chan, line))
. Unabhängig davon, welche form Sie bevorzugen, schlage ich vor, dass Sie aktualisieren Sie Ihre Antwort.Möchten Sie wahrscheinlich so etwas wie:
Schließen Sie Sie nicht bei jeder iteration der Schleife und print-Zeile anstelle von Linien. Auch verwenden, readlines, um alle Linien.
BEARBEITEN entfernt meine andere Antwort - die anderen in dieser Diskussion ist die bessere alternative als das, was ich hatte, es gibt also keinen Grund, es zu kopieren.
Ebenfalls auszog, das \n mit read().splitlines()
readline()
undreadlines()
beide behalten die trailing newline" - Zeichen in der Zeile(s) Sie zurückgeben. Das Ergebnis wird eine Menge von Leerzeilen gedruckt und gesendet.for line in f
for line in f
bewahrt auch die nachgestellte newline-Zeichen.Könnten Sie versuchen, diese. Es Lesen nicht alle f gleichzeitig in den Speicher (mit dem file-Objekt ist iterator) und es schließt die Datei, wenn der code lässt das mit block.
Wenn Sie eine ältere version von python (vor 2.6) müssen Sie haben
Schleife durch die Datei.
Haben Sie versucht,
?
liest nur "eine Zeile", auf der anderen Seite
liest ganze Zeilen und gibt Ihnen eine Liste mit allen Linien.
readlines()
liest die gesamte Datei in den Speicher, mit jeder Zeile und Ihre trailing newline intakt, so dass dieprint line
- Ausgabe wird zwei von Ihnen. Diefor line in open()
text-Datei Lesen coding style lässt auch die Datei öffnen, nachdem die Schleife wird beendet, da es keinen Weg zu finden, um es wieder undclose()
es.