2014-02-17 15 views

Antwort

41

Wenn Sie einen Zeilenumbruch wünschen, müssen Sie einen explizit schreiben. Der übliche Weg ist wie folgt:

hs.write(name + "\n") 

Dieses verwendet einen Backslash zu entkommen, \n, die Python in Stringliterale zu einem Newline-Zeichen umwandelt. Es verkettet nur Ihren String, name, und dieses Newline-Zeichen in eine größere Zeichenfolge, die in die Datei geschrieben wird.

Es ist auch möglich, eine mehrzeilige Stringliteral stattdessen zu verwenden, die wie folgt aussieht:

""" 
""" 

Oder Sie können Zeichenfolge verwenden, anstatt Verkettung Formatierung:

hs.write("{}\n".format(name)) 

Alle Dies wird im Kapitel Input and Output im Tutorial erläutert.

3

Ich nehme an, dass alles, was Sie wollen, sind einfach String-Verkettung:

def storescores(): 

    hs = open("hst.txt","a") 
    hs.write(name + " ") 
    hs.close() 

Alternativ ändern Sie die „“ auf „\ n“ für eine neue Zeile.

+1

Er eine neue Zeile zwischen ihnen will, kein Raum. (Es ist schwer zu sagen von der Frage, weil seine Formatierung gebrochen ist, aber wenn Sie auf die Fragequelle schauen, tippte er einen Zeilenumbruch.) – abarnert

+0

Danke - ich habe das nur für den Fall adressiert, aber ich hatte die Formatierung nicht überprüft. –

+0

Ja, es tut mir leid, ich bin neu auf dieser Website und konnte mich nicht mit der Formatierung von Fragen herumschlagen, aber ich habe es jetzt, danke – RyanH2796

4

Es gibt auch eine Tatsache, die Sie beachten müssen. Sie sollten zuerst prüfen, ob Ihre Datei leer ist, bevor Sie etwas hinzufügen. Wenn Ihre Datei leer ist, dann glaube ich nicht, dass Sie am Anfang der Datei eine leere neue Zeile hinzufügen möchten. Dieser Code

  1. zunächst überprüft, ob die Datei ist leer
  2. Wenn die Datei leer ist es dann einfach Ihre Eingabe von Text in die Datei hinzufügen, sonst wird es eine neue Zeile hinzufügen, und dann wird es Ihren Text addieren, Datei. Sie sollten einen Versuch Catch für os.path.getsize() verwenden, um Ausnahmen zu fangen.

Code:

import os 

def storescores(): 
hs = open("hst.txt","a") 
if(os.path.getsize("hst.txt") > 0): 
    hs.write("\n"+name) 
else: 
    hs.write(name) 

hs.close() 
8

Alle Antworten scheinen gut zu funktionieren. Wenn Sie diese oft tun müssen, beachten Sie, dass das Schreiben

hs.write(name + "\n") 

eine neue Zeichenfolge im Speicher konstruiert und anfügt, dass in die Datei.

Effizientere

hs.write(name) 
hs.write("\n") 

wäre das nicht eine neue Zeichenfolge schafft, hängt nur in die Datei.

+1

Dies ist eine Abwägung zwischen dem Erstellen einer neuen Zeichenfolge im Speicher mit 'BINARY_ADD' gegenüber einem' LOAD_FAST', um hs zu erhalten (kann außerhalb der Schleife optimiert werden), 'LOAD_ATTR', um' write' zu ​​erhalten, und eine 'CALL_FUNCTION' (relativ hohen Overhead) zweimal, so dass es von der Größe der 'name' string abhängen kann. Am Ende ist Benchmarking der beste Weg, um zu sehen (und nur, wenn Sie diese Beschleunigung benötigen). –

4

Ich hatte das gleiche Problem. Und ich konnte es mit einem Formatierer lösen.

file_name = "abc.txt" 
new_string = "I am a new string." 
opened_file = open(file_name, 'a') 
opened_file.write("%r\n" %new_string) 
opened_file.close() 

Ich hoffe, das hilft.

0

In Python> = 3.6 können Sie neue verwenden string literal Feature:

with open('hst.txt', 'a') as fd: 
    fd.write(f'\n{name}') 

Bitte beachten Sie 'with statment' verwenden, automatisch schließen Datei, wenn es läuft fd Umfang von