我有以下代码:
lines[usernum] = str(user) + "\n"
f = open('users.txt','w')
userstr = str(lines)
f.write(userstr)
实际上,我正在lines
修改usernum
列表,然后将其写回原始文件'users.txt'
。但是,即使添加“\ n”,所有内容都会写入一行,而不是lines
中每行的单行。这是为什么?
答案 0 :(得分:2)
这是因为str(lines)
不会按预期执行:
>>> lst = ['This', 'is a\n', 'fancy\n', 'list']
>>> print(str(lst))
['This', 'is a\n', 'fancy\n', 'list']
如您所见,它将编写列表的表示,而不是打印出各行。您可以使用str.join
来组合列表元素:
lines[usernum] = str(user)
with open('users.txt', 'w') as f:
f.write('\n'.join(lines))
使用'\n'
作为连接字符将确保在每个列表元素之间插入换行符,因此您无需手动将其添加到每个项目中。
此外,在处理文件时,建议在打开文件时使用with
语句,以确保在使用完文件后正确关闭它们。
答案 1 :(得分:1)
您正在将列表的字符串表示写入文件。
Python容器的字符串表示使用内容的表示,而不是直接写字符串。
使用writelines()
函数编写一系列字符串:
f.writelines(lines)
或分别写下每一行:
for line in lines:
f.write(line)
或将这些行连接成一个长字符串:
f.write(''.join(lines))
后者还允许您在撰写本文时使用\n
作为连接字符串添加换行符:
f.write('\n'.join(lines))
其中lines
包含字符串,不带换行符。
答案 2 :(得分:1)
使用for循环和'\n'
在新行上写下每个项目:
with open('users.txt','w') as f:
for line in lines:
f.write('{}\n'.format(line))
在str()
或list
之类的python对象上调用dict
只会返回该对象的str
版本,将其内容写入您应该循环的文件
<强>演示:强>
lines = [1, 'foo', 3, 'bar']
with open('users.txt','w') as f:
for line in lines:
f.write('{}\n'.format(line))
...
>>> !cat users.txt
1
foo
3
bar