我尝试用Python 3将一个数组(list?)写入文本文件。
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”,但是看起来写操作在一次操作中就转储了数组。这个问题类似于How to write list of strings to file, adding newlines?,但是语法看起来像是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给出“类型错误:must be str,not list”,我认为这是因为Python 2和Python3之间的变化。在换行符上获取每个元素时,我遗漏了什么?
编辑:感谢@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-list类型的错误;我一直在想我需要告诉定义它正在得到一个列表/数组传递给它,并且仅仅声明“test”将是一个字符串。)当我将它改为文本并使用myfile.write和join时,它工作了,并且额外的\n在文件的末尾放入了最后一个换行符。
3条答案
按热度按时间oiopk7p51#
myfile.close
--在使用with
的地方去掉它。with
自动关闭myfile
,并且当你不使用with
时,你必须像调用close()
一样调用close
,这样它才能做任何事情。不要使用
print
写入文件--使用file.write
。在这种情况下,您希望写入一些行,中间要有换行符,因此您可以使用'\n'.join(lines)
连接这些行,并将创建的字符串直接写入文件。如果
lines
的元素不是字符串,请尝试:先转化他们。
你的第二个版本不起作用的原因不同。如果你通过了
到
它将成为
因为
*
将它得到的每个参数放入一个列表中,即使传递的已经是一个列表。如果您希望支持传递多个列表,并且仍然一个接一个地编写它们,请执行以下操作
或者,对于一个列表,去掉
*
并执行上面的操作。编辑:@Arafangion是对的,你应该用
b
代替t
来写文件,这样你就不用担心不同的平台处理换行符的方式不同。e7arh2l62#
这里面有很多错误。
1.你的压痕搞砸了。
1.保存_to_file中的“text”属性引用所有参数,而不仅仅是特定参数。
1.您使用的是“文本模式”,这也会引起混淆。请改用二进制模式,以便对“\n”具有一致且明确的含义。
当你迭代“文本中的行”时,由于这些错误,你实际上是在迭代函数中的参数,因为“文本”代表了你所有的参数。这就是“*”所做的。(至少在这种情况下。严格地说,它迭代了所有剩余的参数--请阅读文档)。
bihw5rsg3#
我是python的高手,但我找到了这个解决方案,并且为我工作。通过使用“f”字符串,列表中的每一项都可以写入文本文件的新行中。
我的列表=['a','b','c']
打开文件(“/路径/到/文件名. txt”,模式=“w”,编码=“utf-8”)作为myfile:
对于my_list中的项目:
输出:
项目a
B
(c)秘书长的报告