shutil.copy 工作 - 但它循环了 10 次?



我写了一些代码来帮助我备份照片。 我决定使用打印功能让我知道文件何时备份,这样我就可以以简单的方式查看大规模备份的进度。

这个脚本有效,但是,当我使用打印功能时,我注意到文件显然针对相同文件名的每个文件复制了 10 次。

for subdir, dirs, files in os.walk(incomingdir):
for f in files:
filepath = os.path.join(subdir,f)
f_name,f_ext = (os.path.splitext(f))
f_proj = (f_name.split('_')[0])
f_cam = (f_name.split('_')[1])
f_num = (f_name[-2:])
with open(barcode_csv, 'r') as csv_file:
csv_reader = csv.reader(csv_file, delimiter=',')
for row in csv_reader:
if f_proj == row[1]:
if row[4] == "ROW 4 VALUE":
shutil.copy(filepath,backupdir)
print(f, " copied to NAS.")

我从中得到的输出将如下所示:

1911205D4_CAM01_01.cr2 copied to NAS.
1911205D4_CAM01_01.cr2 copied to NAS.
1911205D4_CAM01_01.cr2 copied to NAS.
1911205D4_CAM01_01.cr2 copied to NAS.
1911205D4_CAM01_01.cr2 copied to NAS.
1911205D4_CAM01_01.cr2 copied to NAS.
1911205D4_CAM01_01.cr2 copied to NAS.
1911205D4_CAM01_01.cr2 copied to NAS.
1911205D4_CAM01_01.cr2 copied to NAS.
1911205D4_CAM01_01.cr2 copied to NAS.
1911205D4_CAM01_02.cr2 copied to NAS.
1911205D4_CAM01_02.cr2 copied to NAS.
1911205D4_CAM01_02.cr2 copied to NAS.
1911205D4_CAM01_02.cr2 copied to NAS.
1911205D4_CAM01_02.cr2 copied to NAS.
1911205D4_CAM01_02.cr2 copied to NAS.
1911205D4_CAM01_02.cr2 copied to NAS.
1911205D4_CAM01_02.cr2 copied to NAS.
1911205D4_CAM01_02.cr2 copied to NAS.
1911205D4_CAM01_02.cr2 copied to NAS.

文件将按预期复制到指定的目录。我只是想知道这是否向我表明它正在尝试复制同一个文件 10 次,一遍又一遍地写入 9 次?我只是意识到这些备份上的大负载会进行如此多的覆盖并减慢进程,从而给我的 NAS 驱动器带来不必要的压力。

如果我不使用 CSV 而只使用:

print(filepath)

它在屏幕上打印正常,仅显示单数文件。

谁能告诉我为什么它会打印 10 次?如果它实际上是复制 10 次?如果是这样,我将如何确保每个文件只发生一次?

谢谢

您正在复制文件中每一行的文件。我假设您的文件有 10 行。看看你是否能弄清楚如何shutil.copy带出循环for row in csv_reader。函数 any 可能会有所帮助,但一个布尔变量来查看您的条件是否得到满足可以完成这项工作。

最新更新