1

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

先感谢您!

4

1 回答 1

1

您的文件只显示最后一个值的原因是因为每次您打开带有w标志的文件时,它都会删除现有文件。如果你打开它一次然后使用文件对象,你会没事的,所以你会这样做(注意,这不是一个非常干净/pythonic 的方式,只是清楚 open 命令是如何工作的)

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)
于 2012-06-12T22:37:37.820 回答