如何在 Python3 中使用换行符将列表写入文件

我正在尝试使用 Python 3 将数组(列表?)写入文本文件。目前我有:

def save_to_file(*text):

with open('/path/to/filename.txt', mode='wt', encoding='utf-8') as myfile:
for lines in text:
print(lines, file = myfile)
myfile.close
这会将看起来像数组的内容直接写入文本文件,即,

['element1', 'element2', 'element3']
username@machine:/path$
我要做的是创建文件

element1
element2
element3
username@machine:/path$
我尝试了不同的方法来循环并附加一个“\n”,但似乎写入正在一个操作中转储数组。问题类似于如何将字符串列表写入文件,添加换行符?但是语法看起来像是用于 Python 2 的?当我尝试修改后的版本时:

def save_to_file(*text):

myfile = open('/path/to/filename.txt', mode='wt', encoding='utf-8')
for lines in text:
myfile.write(lines)
myfile.close
...Python shell 给出了“TypeError: must be str, not list”,我认为这是因为 Python2 和 Python 3 之间的变化。让每个元素都换行我错过了什么?

编辑:感谢@agf 和@arafangion;结合你们两个写的,我想出了:

def save_to_file(text):

with open('/path/to/filename.txt', mode='wt', encoding='utf-8') as myfile:
myfile.write('\n'.join(text))
myfile.write('\n')
看起来我对 "*text" 有部分问题(我读过扩展参数,但直到你写道 [element] 变成 [[element]] 我得到了一个 str-not-列表类型错误;我一直认为我需要告诉定义它正在获取传递给它的列表/数组,并且仅说明“测试”将是一个字符串。)一旦我将其更改为文本并使用 myfile.txt ,它就起作用了。使用 join 写入,附加的 \n 将放在文件末尾的最后一个换行符中。

已邀请:
myfile.close- 摆脱你使用的地方with。with自动关闭myfile,并且您必须close像close()无论如何一样调用它才能在您不使用时执行任何操作with。您应该始终with在 Python 3 上使用。

with open('/path/to/filename.txt', mode='wt', encoding='utf-8') as myfile:
myfile.write('\n'.join(lines))
不要print用于写入文件 - 使用file.write. 在这种情况下,您想写一些中间有换行符的行,因此您可以将这些行连接起来,'\n'.join(lines)并将创建的字符串直接写入文件。

如果 的元素lines不是字符串,请尝试:

myfile.write('\n'.join(str(line) for line in lines))
首先转换它们。

由于不同的原因,您的第二个版本不起作用。如果你通过

['element1', 'element2', 'element3']


def save_to_file(*text):
它会变成

[['element1', 'element2', 'element3']]
因为*将它进入的每个参数放入一个列表中,即使您传递的内容已经是一个列表。

如果你想支持传递多个列表,并且仍然一个接一个地写它们,那么做

def save_to_file(*text):

with open('/path/to/filename.txt', mode='wt', encoding='utf-8') as myfile:
for lines in text:
myfile.write('\n'.join(str(line) for line in lines))
myfile.write('\n')
或者,对于一个列表,摆脱*并做我上面做的事情。

编辑: @Arafangion 是对的,您可能应该只使用b而不是t写入文件。这样,您就不必担心不同平台处理换行符的不同方式。

要回复问题请先登录注册