打开并对多个文件执行操作

时间:2013-04-19 14:37:15

标签: python file

我有3个文件,其中包含目录中其他文件的列表。我正在尝试获取列表中的文件并将它们复制到新目录。当我得到一个IOError时,我想我正在绊倒打开文件的最佳方法:[Errno 2]没有这样的文件或目录。我有一个使用打开文件的游戏,但无法让我的操作工作。这是我的代码和我正在尝试阅读的一些文件。

import shutil
import os

f=open('polymorphI_hits.txt' 'polymorphII_hits.txt' 'polymorphIII_hits.txt')
res_files=[line.split()[1] for line in f]
f=close()

os.mkdir(os.path.expanduser('~/Clustered/polymorph_matches'))

for file in res_files:
    shutil.copy(file, (os.path.expanduser('~/Clustered/polymorph_matches')) + "/" + file)

PENCEN.res      2.res   number molecules matched:       15      rms deviation   0.906016
PENCEN.res      3.res   number molecules matched:       15      rms deviation   1.44163
PENCEN.res      5.res   number molecules matched:       15      rms deviation   0.867366

编辑:我使用下面的Ayas代码修复此问题,但现在得到IOError:[Errno 2]没有这样的文件或目录:'p'。我猜它正在读取文件名的第一个字符并在那里失败,但我无法弄清楚原因。

res_files = []
for filename in 'polymorphI_hits.txt' 'polymorphII_hits.txt' 'polymorphIII_hits.txt':
    res_files += [line.split()[1] for line in open(filename)]

1 个答案:

答案 0 :(得分:1)

Python将连续的字符串常量视为单个字符串,因此行...

f=open('polymorphI_hits.txt' 'polymorphII_hits.txt' 'polymorphIII_hits.txt')

...实际上被解释为......

f=open('polymorphI_hits.txtpolymorphII_hits.txtpolymorphIII_hits.txt')

...可能是指一个不存在的文件。

我不相信有一种方法可以在一次调用中使用open()打开多个文件,因此您需要更改...

f=open('polymorphI_hits.txt' 'polymorphII_hits.txt' 'polymorphIII_hits.txt')
res_files=[line.split()[1] for line in f]
f=close()

......更像是......

res_files = []
for filename in 'polymorphI_hits.txt', 'polymorphII_hits.txt', 'polymorphIII_hits.txt':
    res_files += [line.split()[1] for line in open(filename)]

但其余的代码看起来还不错。