Python 3.x 如何让ZipFile只压缩指定的目录-Python 3
当我尝试用下面的代码压缩一个目录时,我的目录被压缩并包含我想要压缩的所有文件,但是它也压缩了我想要压缩的目录的根目录 (Test是要压缩的目标目录-它包含其他目录和文件)解压缩my_python_files.zip时,它使用绝对路径进行解压缩: 解压缩my_python_files.zip: \用户\hhafez\Desktop\Test 当我想要: \试验 我很难找到一个方法来避免这种情况,任何提示将不胜感激Python 3.x 如何让ZipFile只压缩指定的目录-Python 3,python-3.x,zipfile,Python 3.x,Zipfile,当我尝试用下面的代码压缩一个目录时,我的目录被压缩并包含我想要压缩的所有文件,但是它也压缩了我想要压缩的目录的根目录 (Test是要压缩的目标目录-它包含其他目录和文件)解压缩my_python_files.zip时,它使用绝对路径进行解压缩: 解压缩my_python_files.zip: \用户\hhafez\Desktop\Test 当我想要: \试验 我很难找到一个方法来避免这种情况,任何提示将不胜感激 def get_all_file_paths(directory): fil
def get_all_file_paths(directory):
file_paths = []
for root, directories, files in os.walk(directory):
for filename in files:
filepath = os.path.join(root, filename)
file_paths.append(filepath)
return file_paths
def zipfiles():
file_paths = get_all_file_paths(r"C:\Users\hhafez\Desktop\Test")
with ZipFile('my_python_files.zip','w') as myzip:
for file in file_paths:
print(file)
myzip.write(file)
print('All files zipped successfully!')
zipfiles()
如果要压缩文件列表,但不希望压缩档案包含每个文件的绝对路径
def zipFiles(directory):
parentDir = "C:\Users\hhafez\Desktop" #hardcoding parent path to strip
with ZipFile('my_python_files.zip','w') as myzip:
for root, directories, files in os.walk(directory):
zipFileName = root[len(parentDir):] #always take whats after the parentDir for the filename going in the zip
for file in files:
myzip.write(os.path.join(root,file), os.path.join(zipFileName,file), compress_type=zipfile.ZIP_DEFLATED)
zipfiles(r"C:\Users\hhafez\Desktop\Test")
这应该能满足你的需要。这里的主要区别是zipFileName变量
zipFileName = root[len(parentDir):]
这一行从正在爬网的目录中删除parentDir。zipFileName和文件名将是传递给myzip.write的归档文件名,这说明:
myzip.write(os.path.join(root,file), os.path.join(zipFileName,file), compress_type=zipfile.ZIP_DEFLATED)
如果要压缩文件列表,但不希望压缩档案包含每个文件的绝对路径
def zipFiles(directory):
parentDir = "C:\Users\hhafez\Desktop" #hardcoding parent path to strip
with ZipFile('my_python_files.zip','w') as myzip:
for root, directories, files in os.walk(directory):
zipFileName = root[len(parentDir):] #always take whats after the parentDir for the filename going in the zip
for file in files:
myzip.write(os.path.join(root,file), os.path.join(zipFileName,file), compress_type=zipfile.ZIP_DEFLATED)
zipfiles(r"C:\Users\hhafez\Desktop\Test")
这应该能满足你的需要。这里的主要区别是zipFileName变量
zipFileName = root[len(parentDir):]
这一行从正在爬网的目录中删除parentDir。zipFileName和文件名将是传递给myzip.write的归档文件名,这说明:
myzip.write(os.path.join(root,file), os.path.join(zipFileName,file), compress_type=zipfile.ZIP_DEFLATED)
basename似乎删除了我目标目录中的所有目录,我想保留目标目录中的所有内容。@HishamHafez删除了我的basename尝试,并根据您的评论更改了我的解决方案basename似乎删除了我目标目录中的所有目录,我想保留目标目录中的所有内容。@HishamHafez删除了我的basename尝试,并根据您的评论更改了我的解决方案