如何将新数据附加到新行

问题描述 投票:0回答:10

我的代码如下所示:

def storescores():

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

所以如果我运行它并输入“Ryan” 然后再次运行并输入“Bob” 文件 hst.txt 看起来像

RyanBob 

而不是

Ryan
Bob

我该如何解决这个问题?

python file-io append
10个回答
119
投票

如果你想要换行符,你必须明确地写一个。通常的做法是这样的:

hs.write(name + "\n")

这使用了反斜杠转义符

\n
,Python 将其转换为字符串文本中的换行符。它只是将您的字符串
name
和换行符连接成一个更大的字符串,然后将其写入文件。

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

"""
"""

或者,您可能想使用字符串格式而不是连接:

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

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


38
投票

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

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

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


30
投票

所有答案似乎都很好。如果您需要多次执行此操作,请注意书写

hs.write(name + "\n")

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

效率会更高

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

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


27
投票

答案是在写入字符串后不要添加换行符。这可能会解决不同的问题。您要问的是如何在开始附加字符串之前添加换行符。如果您想添加换行符,但前提是换行符尚不存在,则需要首先通过读取文件来查找。 例如,

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)

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


6
投票

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()

我希望这有帮助。 


5
投票

首先检查文件是否为空
  1. 如果文件为空,那么它只会将您的输入文本添加到文件中,否则它将添加一个新行,然后将您的文本添加到文件中。
  2. 您应该使用 try catch
  3. os.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()



4
投票

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

或者,将“ ”更改为“
"换行符。


1
投票


1
投票
欢迎来到文件处理
新线

python 中的文件处理
123456
78875454

✔ 输出💡点击下方查看✔


OUTPUT 1

CODE


-5
投票

def storescores(): hs = open("hst.txt","a+")

	
© www.soinside.com 2019 - 2024. All rights reserved.