【发布时间】:2021-05-21 22:22:05
【问题描述】:
我有一个主文件夹,其中包含许多子文件夹和文件,还有一个子文件夹。
将新文件添加到主文件夹时,我需要更新该文件(如果该文件存在),或者将该文件与任何子文件夹(如果存在)一起添加到子文件夹中。但是,我不想删除子文件夹中存在但主文件夹中缺少的任何文件。
我正在计算子文件夹和主文件夹中所有文件的 MD5 校验和,以确定哪些文件需要更新/创建。
import os
import hashlib
def md5_checksum(filename):
m = hashlib.md5()
with open(filename, 'rb') as f:
for data in iter(lambda: f.read(1024 * 1024), b''):
m.update(data)
return m.hexdigest()
def getListOfFiles(dirName):
listOfFile = os.listdir(dirName)
allFiles = list()
for entry in listOfFile:
fullPath = os.path.join(dirName, entry)
if os.path.isdir(fullPath):
allFiles = allFiles + getListOfFiles(fullPath)
else:
allFiles.append(fullPath+"::"+md5_checksum(fullPath))
return allFiles
local_path=r'C:\test'
incoming_path=os.path.join(local_path,'Incoming') ## Master Folder
existing_path=os.path.join(local_path,'Colors') ## Child Folder
existing_list=getListOfFiles(existing_path)
download_list=getListOfFiles(incoming_path)
existing_md5=[]
for file in existing_list:
existing_md5.append(file.split('::')[1])
for file in download_list:
if file.split('::')[1] not in existing_md5:
print(file.split('::')[0])
但是,我不确定如何使子文件夹结构以及文件的复制相同?
【问题讨论】:
-
我认为
os.mkdirs和os.path.relative应该可以帮助您构建所需的路径文件夹结构。然后shutils.move就可以用来复制文件了。 -
os.walk是浏览文件夹和文件层次结构的好工具。
标签: python python-3.x