如何在 py7zr 中只压缩选定的单个文件?

问题描述 投票:0回答:2

我有一个包含文件路径(在我的例子中是电影)的列表,该列表称为

collectMovies
并遵循数据结构:

['C:\\Users\\UserName\\Desktop\\Movies\\pso-cash-sd.mkv',
'C:\\Users\\UserName\\Desktop\\Movies\\hda-casino.royale.uncut-1080p.mkv']

如何压缩电影,以便电影而不是整个目录被压缩并显示在7zip存档中?

我尝试的是:

import py7zr with py7zr.SevenZipFile("files.7z","w") as mov: for val in collectMovies: val = val.replace(r"\\",r"\\") try: mov.write(val) except: print("File not Found")
这可行,但它也会写入目录。我只想将电影文件写入存档中。

C:\\Users\\UserName\\Desktop\\Movies\\pso-cash-sd.mkv
我想要的是,压缩档案中只显示

pso-cash-sd.mkv

实际输出如下所示(带有子文件夹):

我想要的是,只显示电影,例如:

python 7zip
2个回答
2
投票

选项 1: 无需从 Movies 目录构建图像列表,也无需使用 os.listdir()

os.chdir()
 操作路径字符串。恕我直言,如果您想更改电影文件的路径,这是一种更干净且不易出错的方法。

import os import py7zr movie_dir = r'"C:\Users\UserName\Desktop\Movies\"' with py7zr.SevenZipFile('files.7z','w') as mov: for item in os.listdir(movie_dir): try: os.chdir(movie_dir) mov.write(item) except: print('File not Found')

选项2:使用原始问题中使用的列表方法,从路径字符串中提取电影文件名并使用os.chdir()

import os import py7zr movie_dir = r'"C:\Users\UserName\Desktop\Movies\"' collectMovies = ['C:\\Users\\UserName\\Desktop\\Movies\\pso-cash-sd.mkv', 'C:\\Users\\UserName\\Desktop\\Movies\\hda-casino.royale.uncut-1080p.mkv'] with py7zr.SevenZipFile('files.7z','w') as mov: for val in collectMovies: # extract file name from path: val = val.split('\\')[5] try: os.chdir(movie_dir) mov.write(val) except: print('File not Found')
    

0
投票
尝试下面的代码,它应该会给你你想要的。

import py7zr collectMovies = ['C:\\Users\\UserName\\Desktop\\Movies\\pso-cash-sd.mkv', 'C:\\Users\\UserName\\Desktop\\Movies\\hda-casino.royale.uncut-1080p.mkv'] target = [m.replace("C:\\Users\\UserName\\Desktop\\Movies\\", "") for m in collectMovies] with py7zr.SevenZipFile("files.7z","w") as mov: for i, val in enumerate(collectMovies): try: mov.write(val, target[i]) except: print("File not Found")

© www.soinside.com 2019 - 2024. All rights reserved.