Python 3.x 如何让ZipFile只压缩指定的目录-Python 3

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

当我尝试用下面的代码压缩一个目录时,我的目录被压缩并包含我想要压缩的所有文件,但是它也压缩了我想要压缩的目录的根目录

(Test是要压缩的目标目录-它包含其他目录和文件)解压缩my_python_files.zip时,它使用绝对路径进行解压缩:

解压缩my_python_files.zip:

\用户\hhafez\Desktop\Test

当我想要:

\试验

我很难找到一个方法来避免这种情况,任何提示将不胜感激

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尝试,并根据您的评论更改了我的解决方案