Python 如何将新数据追加到新行

Python 如何将新数据追加到新行,python,file-io,append,Python,File Io,Append,我的代码如下所示: def storescores(): hs = open("hst.txt","a") hs.write(name) hs.close() hs.write(name + "\n") """ """ 所以如果我运行它并输入“Ryan” 然后再次运行并输入“Bob” 文件hst.txt看起来像 RyanBob 而不是 Ryan Bob 如何修复此问题?如果需要换行符,必须显式编写一行。通常的方法是这样的: def storescores():

我的代码如下所示:

def storescores():

   hs = open("hst.txt","a")
   hs.write(name)
   hs.close() 
hs.write(name + "\n")
"""
"""
所以如果我运行它并输入“Ryan” 然后再次运行并输入“Bob” 文件hst.txt看起来像

RyanBob 
而不是

Ryan
Bob

如何修复此问题?

如果需要换行符,必须显式编写一行。通常的方法是这样的:

def storescores():

   hs = open("hst.txt","a")
   hs.write(name)
   hs.close() 
hs.write(name + "\n")
"""
"""
这使用反斜杠转义,
\n
,Python将其转换为字符串文本中的换行符。它只是将您的字符串,
name
,以及该换行符连接成一个更大的字符串,然后写入文件

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

def storescores():

   hs = open("hst.txt","a")
   hs.write(name)
   hs.close() 
hs.write(name + "\n")
"""
"""
或者,您可能希望使用字符串格式而不是串联:

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

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

所有这些都在本教程的章节中进行了解释。

我想您需要的只是简单的字符串连接:

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

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

或者,将换行符的“”更改为“\n”
  • 首先检查文件是否为空
  • 如果文件为空,则只需将输入文本添加到文件中,否则将添加新行,然后将文本添加到文件中。您应该为
    os.path.getsize()
    使用try catch来捕获任何异常
  • 代码

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

    所有的答案似乎都很有效。如果您需要多次这样做,请注意

    hs.write(name + "\n")
    
    在内存中构造一个新字符串并将其附加到文件中

    效率更高的是

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

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

    我也有同样的问题。我通过使用格式化程序解决了这个问题

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

    我希望这有帮助

    在Python>=3.6中,您可以使用新功能:


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

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

    比如说,

    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)
    

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

    您需要更改参数“a”=>“a+”。
    import subprocess
    subprocess.check_output('echo "' + YOURTEXT + '" >> hello.txt',shell=True)
    
    遵循以下代码:

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

    他希望他们之间有一条新的界线,而不是空间。(很难从问题中分辨出来,因为他的格式被破坏了,但如果你看问题来源,他键入了一行新行。)谢谢-我确实提到了这个问题,以防万一,但我没有检查格式。是的,对不起,我是这个网站的新手,不能完全理解问题的格式,但我现在知道了, thanks@user3320839:通常,当我编辑一个问题时,我会添加一条注释来解释我所做的事情,但在这种情况下,我很确定你可能会自己找到答案。没有造成伤害;没有人会在第一次尝试时写出完美的问题。这是在使用
    BINARY\u ADD
    在内存中构造一个新字符串与执行
    LOAD\u FAST
    以获得hs(可以优化过大的循环)、
    LOAD\u ATTR
    以获得
    write
    ,以及两次
    调用函数
    (相对较高的开销)之间的折衷,因此,它可能取决于
    名称
    字符串的大小。最后,基准测试是最好的方法(并且只有在您需要这种加速的情况下),您是否尝试过自己的代码。我认为它不起作用。是的。当然,因为它起作用了。我通常在我的项目中使用它!但是,Windows的文件不使用“\n\r”表示行尾吗?