【发布时间】:2010-12-22 10:01:53
【问题描述】:
我正在尝试编写一个基于字典值打开文件的脚本。对于每个键/值,它会根据该值的名称打开一个文件,并将该文件分配给该值的名称(我认为这里出错了)。到目前为止,它使用正确的名称为我打开了文件,这样就可以了。但是,我认为我分配 open(file) 函数的名称是错误的,因为我的函数的其余部分不再打开文件,而且我无法关闭它们。 我的脚本示例:
filelist=[]
codeconv={"agt":"r1p1d", "aga":"r2p1d"}
for value in codeconv.values():
value=open("c:\Biochemistry\Pythonscripts\Splittest\split"+value+".txt", 'w')
filelist.append(value)
"Here I do something with the files"
for f in filelist:
f.close()
所以问题是,如何将 open(file) 函数分配给正确的名称? (这里以 r1p1d 和 r2p1d 为例)我以后如何再次调用它们?
我现在得到的错误是: AttributeError:'str'object 没有属性'close' 在 f.close() 行上。
编辑:它现在可以按照我的意愿工作,使用以下代码:(为了清楚起见,我现在还包括了“我在这里做某事”部分)
result=open("C:\\Biochemistry\\Pythonscripts\\Illuminaresults.txt", "r")
filelist=[]
codeconv={"agt":"r1p1d", "aga":"r2p1d"}
opened_files={}
for key, value in codeconv.items():
filename="c:\Biochemistry\Pythonscripts\Splittest\split"+value+".txt"
file=open(filename, 'w')
opened_files.update({key: file})
for line in result:
if line[0]==">":
lastline=line
if line[0:3] in codeconv and len(line)==64:
f=opened_files[line[0:3]]
f.write(lastline+line)
else: continue
for f in opened_files.values():
f.close()
result.close()
虽然当我尝试编写脚本的下一部分时,我现在遇到了另一个问题,但这可能是另一个问题,因为它给出了一个与这部分无关的 Windowserror。感谢大家的帮助!
【问题讨论】:
-
filelist声明在哪里? -
filelist 在此之前声明,我的脚本中只有 filelist=[]
-
不要使用
file作为变量。它会隐藏一个内置类型。
标签: python function dictionary