我想知道如何将数组保存到文件中。你已经帮了我很多,但我有更天真的问题(我是Python的新手):
@<TRIPOS>MOLECULE
NAME123
line3
line4
line5
line6
@<TRIPOS>MOLECULE
NAME434543
line3
line4
line5
@<TRIPOS>MOLECULE
NAME343566
line3
line4
我目前拥有此代码,但它只保存数组中的最后一项,而不是items_grep
中列出的所有内容。如何解决这个问题?
items = []
with open("test.txt", mode="r") as itemfile:
for line in itemfile:
if line.startswith("@<TRIPOS>MOLECULE"):
items.append([])
items[-1].append(line)
else:
items[-1].append(line)
#
# list to grep
items_grep = open("list.txt", mode="r").readlines()
# writing files
for i in items:
if i[1] in items_grep:
open("grep.txt", mode="w").write("".join(i))
提前谢谢!
答案 0 :(得分:1)
您的文件仅显示最后一个值的原因是因为每次使用w
标志打开文件时,它都会删除现有文件。如果你打开它然后使用文件对象,你会没事的,所以你要做(注意,这不是一个非常干净/ pythonic的方式,只是清楚open命令如何工作)< / p>
myfile = open("grep.txt", "w")
for i in ...
if i[1] ...:
myfile.write(i + '\n')
处理这个问题的简单方法是首先进行列表推导,然后加入,例如:
newstr = '\n'.join([''.join(i) for i in items if i[1] in items_grep])
然后立即将整个字符串写入文件。请注意,如果不在项目之间添加\n
,则不会在新行上结束每个项目,而是将所有项目一个接一个地添加,而不是空格。
您还应该考虑使用with
关键字自动关闭文件。
with open("grep.txt","w") as f:
f.write(newstr)