【问题标题】:Auto unzip of password-protected rar files in python在 python 中自动解压缩受密码保护的 rar 文件
【发布时间】:2020-09-03 09:39:13
【问题描述】:

最近开始学习python,有个问题....需要解压rar文件,有密码保护,但是密码写在文件名里,在存档里。等等~300次。如何,用什么以及在哪里可以实施? 比如有一个压缩包383442389.rar,它有两个文件,pass-1337643656.data(名字包含压缩包密码)和下面的压缩包)

【问题讨论】:

    标签: python rar


    【解决方案1】:

    我不确定你的问题的所有背景,但我会尽力回答你。

    1. 你说需要解压一个.rar文件,但这是不可能的,如果文件是.rar你需要解压

    2. 如果您只需要解压缩 .zip

    类似的东西应该可以工作

    from zipfile import ZipFile
    with ZipFile('test1.zip', 'r') as myzip:
        myzip.extractall(pwd='<password>')
    
    1. 以.rar为例

    pip install rarfile(仅在python 3中安装)

    from rarfile import RarFile
    with RarFile('test2.rar', 'r') as myrar:
        myrar.extractall(pwd='<password>')
    
    1. 你提到密码在 .rar 中就像文件名一样
      • pass-1337643656.data
      • 您可以使用列出文件的名称

    RarFile.namelist() 按名称返回存档成员列表。

    所以你可以使用 split 提取密码

    s = 'pass-1337643656.data'
    s.split('-')[1].split('.')[0]
    print(s)
    

    '1337643656'

    你也可以使用正则表达式来提取它

    结论。

    使用 .rar 的完整解决方案可能是

    from rarfile import RarFile
    with RarFile('test2.rar', 'r') as myrar:
        file_names = myrar.namelist()
        pass_file = list(filter(lambda k: 'pass' in k, l))[0]
        pass = pass_file.split('-')[1].split('.')[0]
        myrar.extractall(pwd=pass)
    

    参考。

    【讨论】:

    • 您好!是的,我用词有点错误,我需要一个.rar的案例。在这种情况下,我仍然需要将代码执行多达 300 次(这样只有最终结果出现在 C:\Users\Usero\Desktop 中)。不过,如何指定 test2.rar 的路径?下面是这样一个rar文件的例子,可以看链接:myfile.is/h0325b00o8/Enclosed_rar(另外,编译的时候会报错:Syntax error in C:\Users\Usero\script.py File "C:\Users\ script.py",第 5 行 pass = pass_file..split ('-') [1] .split ('.') [0] ^ SyntaxError: invalid syntax
    • @IgorBezrodnyy 我使用RarFile('test2.rar', 'r') as myrar:``, I you read the referece that I let you regarding to rarfile you can see the specification of the constructor of the object RarFile, as you can see here rarfile.RarFile(file[, mode='r'])` 设置了相对于当前文件夹的路径,我在该行中有我的脚本``其中文件应该是文件的路径
    • 关于消息中的语法错误,您可以看到有2个不必要的点pass_file..split ('-') [1] .split ('.') [0],可能是复制和粘贴错误,因为在答案中我没有看到那个错误,应该成为pass_file.split ('-') [1] .split ('.') [0]
    • @IgorBezrodnyy stackoverflow 的想法并不是要解决你所有的问题,只是更具体地澄清一些事情,也许你不知道或者奇怪的是我知道你是 stackoverflow 的新用户,我认为您需要仔细检查此页面stackoverflow.com/tour
    猜你喜欢
    • 1970-01-01
    • 2012-04-15
    • 2014-07-18
    • 1970-01-01
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多