我想避免在python的文本文件末尾写一个换行符。这是一个我有很多问题,我相信很容易修复。这是一个例子:
fileout = open('out.txt', 'w')
list = ['a', 'b', 'c', 'd']
for i in list:
fileout.write('%s\n' % (i))
这会在文件末尾打印一个\ n字符。如何修改循环以避免这种情况?
答案 0 :(得分:8)
fileout = open('out.txt', 'w')
list = ['a', 'b', 'c', 'd']
fileout.write('\n'.join(list))
答案 1 :(得分:2)
这是一个避免创建中间字符串的解决方案,这在列表大小很大时会很有用。它不是担心文件末尾的换行符,而是将新行放在行之前打印,除了第一行,它在for循环之外处理。
fileout = open('out.txt', 'w')
mylist = ['a', 'b', 'c', 'd']
listiter = iter(mylist)
for first in listiter:
fileout.write(first)
for i in listiter:
fileout.write('\n')
fileout.write(i)
答案 2 :(得分:1)
在我看来,文本文件由文本行组成。行以换行序列终止,其具体细节是特定于平台的。因此,正确的文本文件必须始终每行包含1个换行顺序。
无论如何,您可以通过以不同方式处理最后一行,或者在内存中构建整个文件并将其写为二进制数据来解决这个问题,注意省略最后一个或两个字节,具体取决于您的平台的行饲料序列的确切格式。
答案 3 :(得分:1)
如果你有很长的列表,你不想用join()
转换成一个字符串,那么好的旧旗帜可以拯救:
is_first_line = True
for s in my_list:
if is_first_line:
# see, no write() in this branch
is_first_line = False
else:
# we've just written a line; add a newline
output.write('\n')
output.write(s)