我想避免在python文本文件的末尾写入换行符。这是一个我有很多问题,我相信可以很容易地修复。以下是一个示例:避免在文件结尾处换行 - Python
fileout = open('out.txt', 'w')
list = ['a', 'b', 'c', 'd']
for i in list:
fileout.write('%s\n' % (i))
这会在文件末尾打印一个\ n字符。我如何修改我的循环以避免这种情况?
我想避免在python文本文件的末尾写入换行符。这是一个我有很多问题,我相信可以很容易地修复。以下是一个示例:避免在文件结尾处换行 - Python
fileout = open('out.txt', 'w')
list = ['a', 'b', 'c', 'd']
for i in list:
fileout.write('%s\n' % (i))
这会在文件末尾打印一个\ n字符。我如何修改我的循环以避免这种情况?
fileout = open('out.txt', 'w')
list = ['a', 'b', 'c', 'd']
fileout.write('\n'.join(list))
在我看来,一个文本文件由文本行组成。线以换行序列结束,其确切的细节是特定于平台的。因此,一个正确的文本文件每行必须总是包含1个换行序列。
无论如何,你可以通过不同的方式处理最后一行,或者在内存中构建整个文件并将其写为二进制数据,注意省略最后的一个或两个字节,具体取决于您的平台换行顺序的确切格式。
下面是一个避免创建中间字符串的解决方案,当列表的大小很大时这将会很有帮助。不必担心文件末尾的换行符,它会在之前的新行打印行,第一行除外,第一行在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)
最后一个循环的缩进是否正确? – 9000
是;这是一个小窍门;两个循环都在同一个迭代器上循环;由于内循环在外循环运行第二次迭代之前耗尽了迭代器,所以外循环至多运行一次;如果列表为空,则两个循环都不会运行! – SingleNegationElimination
使用listiter.next()而不是写只能执行一次的outerloop会更清楚吗? –
如果你有,你不想转换成一个字符串join()
很长的名单,好老的标志varaibles前来救援:
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)
谢谢!是的,我处理长文件很合理,所以这会有所帮助。 – bac
非常感谢!尼斯和紧凑也... – bac