移动csv文件中列出的文件?

时间:2016-08-31 02:20:18

标签: python csv

我一直在尝试使用以下代码来移动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)

2 个答案:

答案 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)

所以而不是:

  1. 构建包含CSV文件中所有值的字典

  2. 以某种方式检查源目录中的每个文件是否包含在字典中(这是我试图做的解释)

    • 如果有,请移动它。
  3. 你可以:

    1. 对于从CSV中提取的每个文件,请检查它是否存在于源目录中。
      • 如果是,则将其移至目标目录。
    2. 这是你想要做的吗?

      [如果文件名保持不变,则只需要为shutil.move()的第二个参数指定目标目录。