如何将新数据附加到新行

Rya*_*796 53 python file-io append

我的代码看起来像这样:

def storescores():

   hs = open("hst.txt","a")
   hs.write(name)
   hs.close() 
Run Code Online (Sandbox Code Playgroud)

因此,如果我运行它并输入"Ryan"然后再次运行它并输入"Bob"文件hst.txt看起来像

RyanBob 
Run Code Online (Sandbox Code Playgroud)

代替

Ryan
Bob
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

aba*_*ert 65

如果你想要换行,你必须明确写一个.通常的方式是这样的:

hs.write(name + "\n")
Run Code Online (Sandbox Code Playgroud)

这使用反斜杠转义\n符,Python将其转换为字符串文字中的换行符.它只是将您的字符串name和该换行符连接成一个更大的字符串,该字符串将写入该文件.

也可以使用多行字符串文字,如下所示:

"""
"""
Run Code Online (Sandbox Code Playgroud)

或者,您可能希望使用字符串格式而不是串联:

hs.write("{}\n".format(name))
Run Code Online (Sandbox Code Playgroud)

所有这些都在本教程的输入和输出章节中进行了解释.


ser*_*inc 15

所有答案似乎都很好.如果你需要多次这样做,请注意写作

hs.write(name + "\n")
Run Code Online (Sandbox Code Playgroud)

在内存中构造一个新字符串并将其附加到文件中.

效率会更高

hs.write(name)
hs.write("\n")
Run Code Online (Sandbox Code Playgroud)

它不会创建新字符串,只是附加到文件.

  • 这是在内存中使用“BINARY_ADD”构建新字符串与使用“LOAD_FAST”获取 hs(可以优化以消除循环)、“LOAD_ATTR”获取“write”和“CALL_FUNCTION”(相对而言)之间的权衡高开销)两次,所以它可能取决于“name”字符串的大小。最后,基准测试是最好的观察方式(并且仅当您需要这种加速时)。 (9认同)

Vla*_*den 6

在Python> = 3.6中,您可以使用新的字符串文字功能:

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

请注意在fd超出范围时,使用' with statment '将自动关闭文件


ρss*_*ρss 5

您还必须考虑一个事实。在向其中添加任何内容之前,您应该首先检查文件是否为空。因为如果您的文件为空,那么我认为您不想在文件的开头添加空白的新行。这段代码

  1. 首先检查文件是否为空
  2. 如果文件为空,那么它只会将您的输入文本添加到文件中,否则它将添加一个新行,然后将您的文本添加到文件中。您应该使用 try catch foros.path.getsize()来捕获任何异常。

代码

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()
Run Code Online (Sandbox Code Playgroud)


小智 5

我遇到过同样的问题.我能够通过使用格式化程序来解决它.

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()
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助.


Wyr*_*ood 5

答案是不要在编写字符串后添加换行符。那可能会解决另一个问题。您要问的是如何开始附加字符串之前添加换行符。如果要添加换行符,但仅当不存在换行符时,则需要通过读取文件来首先查找。

例如,

with open('hst.txt') as fobj:
    text = fobj.read()

name = 'Bob'

with open('hst.txt', 'a') as fobj:
    if not text.endswith('\n'):
        fobj.write('\n')
    fobj.write(name)
Run Code Online (Sandbox Code Playgroud)

您可能要在名称后添加换行符,也可以不添加,但是无论如何,这不是问题的答案。