我写了一些代码来帮助我备份照片。 我决定使用打印功能让我知道何时备份了文件,这样我就可以以简单的方式查看大规模备份的进度。
此脚本有效,但是,当我使用打印功能时,我发现文件显然是针对相同文件名的每个文件进行了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遍?如果可以,我该如何确保每个文件只发生一次?
谢谢
答案 0 :(得分:1)
您正在为文件中的每一行复制文件。我假设您的文件有10行。看看是否可以弄清楚如何将shutil.copy
带出循环for row in csv_reader
。函数any可能有帮助,但是一个布尔变量(可以查看您的条件是否满足)可以完成这项工作。