每次将字符串写入新行的文件中

417

每次调用file.write()时,我希望在我的字符串末尾添加一个换行符。在Python中,最简单的方法是什么?

20个回答

470

9
如果你正在使用变量来组合记录,你可以在末尾添加 + "\n" ,例如 fileLog.write(var1 + var2 + "\n")。 - Filipe
22
在较新版本的Python中(3.6+),您也可以使用f-strings:file.write(f"{var1}\n") - halfdan
或使用单引号 file.write(f'{var1}\n') - Timo
如果我们需要一个回调函数怎么办? - mckenzm
使用'\n'来写实际的'\n',如果需要的话。 - Alex Martian

164

你可以用两种方式实现:

f.write("text to write\n")

或者,取决于您的Python版本(2或3):

print >>f, "text to write"         # Python 2.x
print("text to write", file=f)     # Python 3.x

我正在使用f.writelines(str(x))将x列表写入文件中 现在告诉你如何将列表x写入文件,每个列表都从新行开始复制 - kaushik
3
@kaushik: f.write('\n'.join(x)) 或者 f.writelines(i + '\n' for i in x)这段代码的作用是将列表x中的元素按照换行符连接起来,并写入文件f中,或者对于x中的每个元素添加换行符后写入文件f中。 - Steven
我认为f.write方法更好,因为它可以在Python 2和3中使用。 - Dang Manh Truong

113

你可以使用:

file.write(your_string + '\n')

3
当你向文件写入一个整数时,你可以使用 file.write(str(a)+'\n') 这种用法。请注意,这是一个示例用法。 - 未来陆家嘴顶尖的投资人
1
@xikhari 为什么?file.write(f"我的数字是:{number}\n")很好,易读。 - Guimoute

39

如果您要广泛使用它(大量的书面行),您可以对“file”进行子类化:

class cfile(file):
    #subclass file to have a more convienient use of writeline
    def __init__(self, name, mode = 'r'):
        self = file.__init__(self, name, mode)

    def wl(self, string):
        self.writelines(string + '\n')

现在它提供了一个额外的函数wl,可以实现您想要的功能:

with cfile('filename.txt', 'w') as fid:
    fid.wl('appends newline charachter')
    fid.wl('is written on a new line')

也许我漏掉了一些类似于不同的换行符(\ n,\ r,...)或最后一行也以换行符结束的东西,但这对我很有效。


3
在这种情况下,您不需要return None,因为首先,您不需要它;其次,当没有return语句时,每个Python函数默认返回None - Anna
1
这是一个很好的解决方案,而且老实说,file 应该在文件打开时作为参数应用。 - ekydfejj

24

你可以这样做:

file.write(your_string + '\n')

如另一篇回答所建议的那样,为什么要使用字符串拼接(速度慢、容易出错),当你可以调用file.write两次:

像另一个答案建议的那样,但为什么要使用字符串连接(速度慢,容易出错),当您可以调用file.write两次:

file.write(your_string)
file.write("\n")

请注意,写入是有缓冲的,因此它等同于相同的事情。


17

使用fstring从列表中写入的另一种解决方案

lines = ['hello','world']
with open('filename.txt', "w") as fhandle:
  for line in lines:
    fhandle.write(f'{line}\n')

作为一个函数

def write_list(fname, lines):
    with open(fname, "w") as fhandle:
      for line in lines:
        fhandle.write(f'{line}\n')

write_list('filename.txt', ['hello','world'])

13
file_path = "/path/to/yourfile.txt"
with open(file_path, 'a') as file:
    file.write("This will be added to the next line\n")
或者
log_file = open('log.txt', 'a')
log_file.write("This will be added to the next line\n")

5
使用参数"a"而非"w"打开文件并不会改变写入函数的工作方式,只是使得文件不会被覆盖,文本将会被添加到文件的底部而不是从一个空白文件的左上角开始写入。 - democidist

9

除非写入二进制文件,否则请使用print。以下示例适用于格式化csv文件:

def write_row(file_, *columns):
    print(*columns, sep='\t', end='\n', file=file_)

使用方法:

PHI = 45
with open('file.csv', 'a+') as f:
    write_row(f, 'header', 'phi:', PHI, 'serie no. 2')
    write_row(f)  # additional empty line
    write_row(f, data[0], data[1])

您也可以使用partial作为创建此类包装器的更pythonic方式。在下面的示例中,row是具有预定义kwargs的print

from functools import partial


with open('file.csv', 'a+') as f:
    row = partial(print, sep='\t', end='\n', file=f)

    row('header', 'phi:', PHI, 'serie no. 2', end='\n\n')
    row(data[0], data[1])

注:


4

需要注意的是,在 Python 3 中不支持使用 file,且已经被移除。你可以使用内置函数 open 来完成同样的功能。

f = open('test.txt', 'w')
f.write('test\n')

3

好的,这里有一种安全的方法。

with open('example.txt', 'w') as f:
 for i in range(10):
  f.write(str(i+1))
  f.write('\n')


这将数字1到10写入每行一个的新行中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接