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


259

我想在每次调用时在字符串后添加换行符file.write()。在Python中最简单的方法是什么?

Answers:


294

使用“ \ n”:

file.write("My String\n")

请参阅Python手册以获取参考。


3
如果使用变量组成记录,则可以在末尾添加+“ \ n”,例如fileLog.write(var1 + var2 +“ \ n”)。
菲利普

4
在新版本的Python(3.6+)中,您也可以只使用f字符串:file.write(f"{var1}\n")
Halfdan '19

109

您可以通过两种方式执行此操作:

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

2
@kaushik:f.write('\ n'.join(x))或f.writelines(i +'\ n'for i in x)
史蒂文

我认为f.write方法更好,因为它可以在两个Python 2和3中使用
党农德孟张庭

78

您可以使用:

file.write(your_string + '\n')

3
您可以使用这种用法,例如,当您将int写入文件时,可以使用 file.write(str(a)+'\ n')
未来陆家嘴顶尖的投资人

@xikhari为什么?file.write(f"my number is: {number}\n")很好而且可读。
Guimoute

24

如果您广泛使用它(很多书面文字),则可以将'​​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,它可以执行您想要的操作:

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

也许我缺少诸如不同的换行符(\ n,\ r,...)之类的东西,或者最后一行也以换行符结尾,但这对我有用。


1
你并不需要return None在这种情况下,因为第一,你不需要它和第二,每个Python函数返回None时,默认情况没有任何return说法。
安娜

10

你可以做:

file.write(your_string + '\n')

正如另一个答案所建议的那样,但是为什么在您可以调用file.write两次时使用字符串连接(缓慢,容易出错):

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

请注意,写操作是缓冲的,因此相当于同一件事。


6
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")

4
以“ a”作为参数而不是“ w”作为参数打开文件不会更改写入功能,使其以您描述的方式工作。它的唯一作用是不会覆盖文件,并且文本将添加到最底行,而不是从空白文件的左上角开始。
democidist

2

只是一个注释,file不受支持Python 3,已被删除。您可以使用open内置功能执行相同的操作。

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

2

除非写入二进制文件,否则请使用打印。下面的示例非常适合格式化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)  # newline
    write_row(f, data[0], data[1])

笔记:


2

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

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

1

这是我想出的解决方案,试图为自己解决此问题,以便系统地生成\ n作为分隔符。它使用字符串列表进行写入,其中每个字符串都是文件的一行,但是看来它也可能对您有用。(Python 3. +)

#Takes a list of strings and prints it to a file.
def writeFile(file, strList):
    line = 0
    lines = []
    while line < len(strList):
        lines.append(cheekyNew(line) + strList[line])
        line += 1
    file = open(file, "w")
    file.writelines(lines)
    file.close()

#Returns "\n" if the int entered isn't zero, otherwise "".
def cheekyNew(line):
    if line != 0:
        return "\n"
    return ""

为什么不简单with open(path, "w") as file: for line in strList: file.write(line + "\n")?这样,您可以删除所有列表工作,检查并只有3行。
Guimoute
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.