Python 是否移动csv文件中列出的文件?
我一直在尝试使用以下代码移动csv列表中列出的文件。但它最多只能复制列表中的最后一个文件,而不会复制其余文件。 我看到的每一个例子都在不断地碰壁,列出了我做错了什么 我的简历列表将包含如下列表:Python 是否移动csv文件中列出的文件?,python,csv,Python,Csv,我一直在尝试使用以下代码移动csv列表中列出的文件。但它最多只能复制列表中的最后一个文件,而不会复制其余文件。 我看到的每一个例子都在不断地碰壁,列出了我做错了什么 我的简历列表将包含如下列表: 12355,12355.jpg 这是我的密码 import os import shutil import csv keys={} with open('shuttle_image.csv', 'r') as f: reader = csv.reader(f, delimiter = ',') f
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)
我认为这样做是可行的(未经测试): 作为优化,除非您需要
键
字典进行其他处理,否则您可以更改第一部分,使其仅创建第二个for
循环中使用的有效_文件
set变量:
valid_files = set() # empty set
with open('shuttle_image.csv', 'r') as f:
for rowDict in csv.reader(f, delimiter=','):
valid_files |= {rowDict[1]} # add file name to set
print(rowDict) # if desired
我认为这样做是可行的(未经测试): 作为优化,除非您需要
键
字典进行其他处理,否则您可以更改第一部分,使其仅创建第二个for
循环中使用的有效_文件
set变量:
valid_files = set() # empty set
with open('shuttle_image.csv', 'r') as f:
for rowDict in csv.reader(f, delimiter=','):
valid_files |= {rowDict[1]} # add file name to set
print(rowDict) # if desired
之所以只能复制最后一个文件(如果是),是因为这一行:
if file in rowDict[1]:
您正在引用第一个for循环之外的rowDict
。所以在那个执行时刻,它包含这个循环的最后一个值
如果我正确理解了您正在尝试做的事情,您可以尝试以下类似的操作(未测试的代码):
因此,不是:
- 如果有,就移动它
- 如果是,则将其移动到目标目录
[如果文件名保持不变,则只需为shutil.move()的第二个参数指定目标目录即可]之所以只能复制最后一个文件(如果是),是因为这一行:
if file in rowDict[1]:
您正在引用第一个for循环之外的rowDict
。所以在那个执行时刻,它包含这个循环的最后一个值
如果我正确理解了您正在尝试做的事情,您可以尝试以下类似的操作(未测试的代码):
因此,不是:
- 如果有,就移动它
- 如果是,则将其移动到目标目录
[如果文件名保持不变,只需为shutil.move()的第二个参数指定目标目录即可]我假设rowDict[1]只包含最后一个文件名。您检查了rowDict包含的内容了吗?为什么使用rowDict而不是字典键?我假设rowDict[1]只包含最后一个文件名。您检查了rowDict包含的内容了吗?为什么用rowDict而不是字典键呢?谢谢你,马丁,它确实有用。请允许我问一下,使用错误检查列出未找到或未移动的文件的最佳方法是什么?不客气。一种简单的方法是在成功调用
shutil.move()
之后,使用valid\u files-={file}
语句从valid\u files
中删除每个文件名。然后,在移动for
循环结束后,您可以检查其中是否有剩余内容:即是否有有效的\u文件:
,打印('some files not found or moved')
。您还需要将shutil.move()
调用放入一个try
/中,除了shutil.Error:
块,这样任何复制错误都不会导致脚本在出现时终止。谢谢Martin,它确实有效。请允许我问一下,使用错误检查列出未找到或未移动的文件的最佳方法是什么?不客气。一种简单的方法是在成功调用shutil.move()
之后,使用valid\u files-={file}
语句从valid\u files
中删除每个文件名。然后,在移动for
循环结束后,您可以检查其中是否有剩余内容:即是否有有效的\u文件:
,打印('some files not found or moved')
。您还需要将shutil.move()
调用放入try
/中,但shutil.Error:
块除外,以便在出现复制错误时不会导致脚本终止。