如何将数组保存到文件中

时间:2012-06-12 22:32:08

标签: python arrays save

我想知道如何将数组保存到文件中。你已经帮了我很多,但我有更天真的问题(我是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))

提前谢谢!

1 个答案:

答案 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)