0

一个文件写一些文件名列表,比如有文件名

f1
f2 
f3

并且在一个目录中,有许多文件,其中包括这些文件,例如

F2
f1
F3
f2
f3

我想复制出现在文件列表中的文件。我的脚本的错误是*TypeError*,如下所示,

import sys
import shutil,errno
import os
srcDir = 'Root'
dstDir = 'De'
with open('file.txt','r') as f:
 read_filename = f.read()
f.closed
for files in os.walk(srcDir)
  if files in read_filename:
     shutil.move(srcDir,dstDir)
4

1 回答 1

1

您需要将第一个文件变成一个集合(用于快速成员资格测试)。您还在使用os.walk,它为您提供三条信息,目录路径,子目录列表和该目录中的文件列表:

import sys
import shutil,errno
import os
srcDir = 'Root'
dstDir = 'De'

with open('file.txt','r') as f:
    read_filenames = {fname.strip() for fname in f}  # set comprehension

for root, directories, files in os.walk(srcDir):
    for filename in read_filenames.intersection(files):
        shutil.move(os.path.join(root, filename), dstDir)

.intersection()调用返回read_filenames集合中也在files列表中的所有元素。

请注意,我根据变量(文件所在目录的路径)和文件名告诉要移动到的文件的shutil.move()完整路径。dstDiros.path.join()root

于 2013-06-07T20:26:48.917 回答