Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
避免在文件末尾换行-Python_Python_List - Fatal编程技术网

避免在文件末尾换行-Python

避免在文件末尾换行-Python,python,list,Python,List,我希望避免在python中将换行符写入文本文件的末尾。这是一个问题,我有很多,我相信可以很容易地解决。以下是一个例子: fileout = open('out.txt', 'w') list = ['a', 'b', 'c', 'd'] for i in list: fileout.write('%s\n' % (i)) 这会在文件末尾打印一个\n字符。如何修改循环以避免这种情况?在我看来,文本文件由多行文本组成。线路以线路馈送序列终止,具体细节取决于平台。因此,一个适当的文本文件必须

我希望避免在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))

无论如何,您可以通过对最后一行进行不同的处理,或者在内存中构建整个文件并将其作为二进制数据写入,注意省略最后一个或两个字节,这取决于您平台的换行序列的确切格式。

这里有一个避免创建中间字符串的解决方案,当列表的大小较大时,这将非常有用。它不必担心文件末尾的换行符,而是将换行符放在要打印的行之前,第一行除外,它在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)

如果您有很长的列表,但不想用
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)

谢谢是的,我会处理一些长文件,所以这会很有帮助;这是一个小把戏;两个循环在同一迭代器上循环;由于内循环在外循环运行第二次迭代之前耗尽迭代器,因此外循环最多运行一次;如果列表为空,则两个循环都不会运行!使用listiter.next()而不是编写只执行一次的outerloop不是更清楚吗?但是如果列表为空会发生什么呢?您最终不得不以某种方式捕获
StopIteration
。使用for循环而不是try,next,除了StopIteration似乎不那么奇怪。