我有一个将列表内容写入文本文件的函数。对于列表中的每个元素,它将元素写入文本文件,每个元素都有自己的新行。
def write_file(filename):
name_file = filename
filename = open(name_file, 'w')
for line in list:
if line == len(list)-1:
filename.write(line)
else:
filename.write(line+'\n')
filename.close()
我倾向于注意到在文本文件的最后一行生成空换行的错误,我想知道我是否正确地写了文件?
让我们说我的清单包含[1,2,3,4]并将其写入文本文件会给我
1
2
3
4
#in some cases, an empty newline is printed here at the end
由于' \ n'我不知道如何检查写功能是否在最后产生额外的一行。所以,如果有人能给我一些反馈,我会很感激。
答案 0 :(得分:6)
不是多次写入缓冲区,而是执行.join
,并将结果写一次:
with open(filename, 'w') as fp:
fp.write('\n'.join(your_list))
答案 1 :(得分:4)
<强>更新强>
@John Coleman指出了一个误解。似乎最后一行不应该有任何换行符。这可以通过使用enumerate()
提供行数来检查,检查它是否是打印时的最后一行,并相应地改变行结束字符:
def write_file(filename, data):
with open(filename, 'w') as f:
for line_no, item in enumerate(data, 1):
print(item, file=f, end='\n' if line_no < len(data) else '')
这不像使用\n
。join(data)`那样优雅,但它对于大型列表来说是内存效率。
join()
的替代方案是:
def write_file(filename, data):
with open(filename, 'w') as f:
print(*data, file=f, sep='\n', end='')
原始回答:
为什么不简单地使用print()
并指定输出文件?
def write_file(filename, data):
with open(filename, 'w') as f:
for item in data:
print(item, file=f)
或者更简洁:
def write_file(filename, data):
with open(filename, 'w') as f:
print(*data, file=f, sep='\n')
如果您有一个大型列表,前者是首选,因为后者需要解压缩列表以将其内容作为参数传递给print()
。
两个选项都会自动为您处理换行符。
在with
语句中打开文件也会为您关闭文件。
您还可以使用'\n'.join()
加入列表中的项目。同样,这对于小型列表也是可行的。此外,您的示例显示了一个整数列表 - print()
不要求首先将其参数转换为字符串,join()
也是如此。
答案 2 :(得分:0)
尝试
def write_file(filename):
name_file = filename
filename = open(name_file, 'w')
for line in list:
if line == list[-1]:
filename.write(line)
else:
filename.write(line+'\n')
filename.close()
在您的示例line == len(list)-1:
中,您只是在比较列表的长度-1而不是列表中的最后一项。
虽然这仍然不完美,因为如果您在列表中有重复项目(例如[1,2,3,5,2]
)可能会遇到问题,那么最好使用join
或{{1声明。
答案 3 :(得分:0)
如果要从字符串列表中写入文件,可以使用以下代码段:
def write_file(filename):
with open(filename, 'w') as f:
f.write('\n'.join(lines))
lines = ["hi", "hello"]
write_file('test.txt')
答案 4 :(得分:0)
你不应该在这里使用for line in list
,list
不应该用于列表名称,因为单词“list”是python的保留字。这是一个关键字。您可以myLst = list("abcd")
获取myLst=["a", "b", "c", "d"]
关于问题的解决方案,我建议您使用with
方法,以防忘记关闭文件。这样,您就不必关闭文件了。退出缩进将完成工作。以下是我解决问题的方法:
#I just made a list using list comprehension method to avoid writing so much manually.
myLst=list("List number {}".format(x) for x in range(15))
#Here is where you open the file
with open ('testfile.txt','w') as file:
for each in myLst:
file.write(str(each))
if each!=myLst[len(myLst)-1]:
file.write('\n')
else:
#this "continue" command tells the python script to continue on to the next loop.
#It basically skips the current loop.
continue
我希望我能提供帮助。
答案 5 :(得分:-1)
for item in thelist:
thefile.write("%s\n" % item)
我使用循环:
sc.textFile("file:///d:/data.txt").map(x => x.split("\n")).flatMap(x => x).map(x => isName(x)).collect