Python: Wie Schreibe ich eine Liste von strings in separaten Zeilen, aber ohne eine Leerzeile
EDIT: Siehe unten der post für den gesamten code
Ich bin neu in diesem forum und ich habe ein Problem, ich wäre dankbar für jede Hilfe bei der Lösung.
Situation und Ziel:
- Ich habe eine Liste von strings. Jeder string ist ein Wort, wie dieses: ['WORT', 'LINKS', 'ZITAT' ...] und so weiter.
- Ich würde gerne schreiben, diese Liste von Wörtern (Zeichenfolgen), die auf separaten Zeilen in eine neue text-Datei.
- Würde man denken, die Möglichkeit, dies zu tun wäre durch Anhängen von '\n' für jedes Element in der Liste, aber wenn ich das mache, erhalte ich eine leere Zeile zwischen jedem Listenelement. WARUM?
Bitte haben Sie einen Blick auf diese einfache Funktion:
def write_new_file(input_list):
with open('TEKST\\TEKST_ny.txt', mode='wt') as output_file:
for linje in input_list:
output_file.write(linje + '\n')
Dieser erzeugt eine Datei, die wie folgt aussieht:
WORD
LINKS
QUOTE
Wenn ich entfernen Sie die '\n', dann wird die Datei sieht wie folgt aus:
WORDLINKSQUOTE
Stattdessen die Datei sollte wie folgt Aussehen:
WORD
LINKS
QUOTE
Bin ich offensichtlich etwas falsch, aber nach viel Experimentieren und Lektüre rund um das web, ich kann nicht scheinen, um es richtig zu machen.
Jede Hilfe wären wir sehr dankbar, vielen Dank!
Antwort, link zum thread über write() und writelines():
Writelines() nicht dieses Problem beheben, indem selbst, es führt zum selben Ergebnis wie write() ohne das '\n'. Es sei denn ich füge einen Zeilenumbruch zu jedem Punkt der Liste vor der übergabe an die writelines(). Aber dann sind wir wieder bei der ersten option und die leeren Zeilen...
Ich versuchte, verwenden Sie eine der Antworten in dem verlinkten thread, mit '\n'.join() und schreiben(), aber ich bekomme immer noch die leeren Zeilen.
Es kommt unten zu diesem: aus irgendeinem Grund bekomme ich zwei neue Zeilen für jedes '\n', egal wie ich es verwenden. Ich bin .strip()'ing die Liste der Elemente des neue-Zeile-Zeichen, um sicher zu sein, und ohne die nl ist alles nur ein massiver block, der Texte sowieso.
Auf die Verwendung eines anderen Editors: ich habe versucht, öffnen Sie die txt-Datei im windows-notepad und notepad++. Einen Grund, warum diese Programme würde nicht korrekt anzeigen lassen?
EDIT: das ist der komplette code. Sorry für die Norwegische Bezeichnung. Der Zweck des Programms ist zu Lesen und zu bereinigen, eine text-Datei und wieder die Worte zuerst als Liste und schließlich als eine neue Datei, die mit jedem Wort in einer neuen Zeile. Die text-Datei ist eine Liste von Scrabble-Wörter, so ist es ziemlich groß (9 mb oder so). PS: ich bin kein Befürworter Scrabble-Betrug, das ist nur eine Programmier-übung 🙂
def renskriv(opprinnelig_ord):
nytt_ord = ''
for bokstav in opprinnelig_ord:
if bokstav.isupper() == True:
nytt_ord = nytt_ord + bokstav
return nytt_ord
def skriv_ny_fil(ny_liste):
with open('NSF\\NSF_ny.txt', 'w') as f:
for linje in ny_liste:
f.write(linje + '\n')
def behandle_kildefil():
innfil = open('NSF\\NSF_full.txt', 'r')
f = innfil.read()
kildeliste = f.split()
ny_liste = []
for item in kildeliste:
nytt_ord = renskriv(item)
nytt_ord = nytt_ord.strip('\n')
ny_liste.append(nytt_ord)
skriv_ny_fil(ny_liste)
innfil.close()
def main():
behandle_kildefil()
if __name__ == '__main__':
main()
writelines
und sehen diese Frage.öffnen Sie
TEKST_ny.txt
in einen anderen editor ?Die \n springt zur nächsten Zeile und eine neue Zeile wird gestartet, von dort aus geben Sie eine Lücke
Welches OS und welchen text-editor verwenden Sie? Es sieht aus wie Sie auf windows und python schreiben
"\r\n"
für jede neue Zeile-Zeichen (denn das ist es, was eine neue Zeile unter Windows), aber dein text-editor ist unix-basiert und ist die Interpretation der beiden \r
und \n
als neue-Zeile-Zeichen.wenn Sie
with open('TEKST\\TEKST_ny.txt') as f: print(repr(f.read())
, was gedruckt wird?InformationsquelleAutor editionagenda | 2015-05-21
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du hast gesagt, in den Kommentaren, dass python ist das schreiben von zwei carriage return (
'\r'
) Zeichen für jedes line-feed ('\n'
) Zeichen, das Sie schreiben. Es ist ein bisschen bizaare, dass python ersetzt jedes line-feed mit zwei Zeilenschaltungen, aber dies ist eine Funktion des öffnens einer Datei im text-Modus (normalerweise ist die übersetzung wäre etwas nützlicher). Wenn Sie stattdessen öffnen Sie Ihre Datei im binary-Modus, dann ist diese übersetzung nicht gemacht werden und die Datei anzeigen soll, wie Sie es wünschen in Notepad++. NB. Verwendung von Binär-Modus kann Probleme verursachen, wenn Sie benötigen, Zeichen außerhalb des ASCII-Bereichs -- ASCII ist im Grunde nur lateinische Buchstaben (keine Umlaute), Ziffern und einige Symbole.Für python 2 try:
Python 3 wird es ein wenig komplizierter. Für jedes string-literal, Sie wünschen, Sie schreiben müssen Sie voranstellen, es mit einer
b
(für binäre). Für jeden string, den Sie nicht haben sofortigen Zugriff auf, oder wollen sich nicht ändern, um ein Binär-string, dann müssen Sie Sie verschlüsseln, unter Verwendung derencode()
- Methode auf den string. zB.'\r'
? Vielleicht könnte ich einen Weg finden, um Streifen in jeder Sekunde auftreten, in der Datei. Es gibt mehrere hunderttausend Einträge, so ich kann nicht es manuell tun. Nochmals vielen Dank für die Zeit nehmen, mit diesemJa,
'\r'
ist ein carriage return. Ein carriage return Leerzeichen und die Funktionstr.strip
entfernen Sie es. Sie können entfernen Sie die doppelten Zeilenumbrüche in notepad++ über "Suchen ->" Ersetzen..." und Einstellung "finden, was" als\r\r
und Einstellung "ersetzen durch" entweder\r\n
(für windows-Stil Zeilenumbrüche) oder\n
(für unix-Stil Zeilenumbrüche).InformationsquelleAutor Dunes
Ich denke, es muss einige '\n' unter Ihre Zeilen, versuchen Sie, überspringen Sie leere Zeilen.
Ich schlage vor, Sie in diesem code.
InformationsquelleAutor alec_djinn