我一直在尝试使用以下代码来移动csv列表中列出的文件。但最多它会复制列表中的最后一个文件,但不会复制其余文件。 我一直在打破这堵墙,我看到的每个例子都列出了我做错了什么?
我的CVS列表将包含以下列表:
12355,12355.jpg
这是我的代码
import os
import shutil
import csv
keys={}
with open('shuttle_image.csv', 'r') as f:
reader = csv.reader(f, delimiter = ',')
for rowDict in reader:
keys[rowDict[0]] = rowDict[1]
print (rowDict)
dir_src = 'C:\\Users\\Willie\\Desktop\\Suppliers Dropship\\hunting\\'
dir_dst = 'C:\\image\\'
for file in os.listdir(dir_src):
src_file = os.path.join(dir_src, file)
dst_file = os.path.join(dir_dst, file)
if file in rowDict[1]:
shutil.move(src_file, dst_file)
答案 0 :(得分:0)
我认为做这样的事情会有效(未经测试):
getActionBar
作为优化,除非您需要import os
import shutil
import csv
keys={}
with open('shuttle_image.csv', 'r') as f:
reader = csv.reader(f, delimiter=',')
for rowDict in reader:
keys[rowDict[0]] = rowDict[1]
print(rowDict) # if desired
valid_files = set(keys.values()) # file names found in csv
dir_src = 'C:\\Users\\Willie\\Desktop\\Suppliers Dropship\\hunting\\'
dir_dst = 'C:\\image\\'
for file in os.listdir(dir_src):
if file in valid_files:
src_file = os.path.join(dir_src, file)
dst_file = os.path.join(dir_dst, file)
shutil.move(src_file, dst_file)
字典进行其他处理,否则您可以更改第一部分,以便它只创建第二个keys
循环中使用的valid_files
集变量:
for
答案 1 :(得分:0)
为什么它只能复制的最后一个文件(如果是)是因为在这一行:
if file in rowDict[1]:
您在第一个for循环之外引用rowDict
。所以在那个执行时刻,它包含了这个循环的最后一个值。
如果我理解你正在尝试做什么,你可以尝试这样的事情(未经测试的代码):
import os
import shutil
import csv
dir_src = 'C:\\Users\\Willie\\Desktop\\Suppliers Dropship\\hunting\\'
dir_dst = 'C:\\image\\'
with open('shuttle_image.csv', 'r') as f:
reader = csv.reader(f, delimiter = ',')
for rowDict in reader:
id, filename = rowDict
src_file = os.path.join(dir_src, filename)
if os.path.exists(src_file):
shutil.move(src_file, dir_dst)
所以而不是:
构建包含CSV文件中所有值的字典
以某种方式检查源目录中的每个文件是否包含在字典中(这是我试图做的解释)
你可以:
这是你想要做的吗?
[如果文件名保持不变,则只需要为shutil.move()的第二个参数指定目标目录。