我有这样的代码
import rarfile
pwd = None
rar = rarfile.RarFile(source_filename)
rar.extractall(dest_dir,None,pwd) # error from here
这个代码在ubuntu中工作。 当我在Windows上运行时,我得到像这样的错误
Traceback (most recent call last):
File "1_bete_rar.pyw", line 132, in extract
File "1_bete_rar.pyw", line 176, in unrar_file
File "rarfile.pyc", line 586, in extractall
File "rarfile.pyc", line 1112, in _extract
File "rarfile.pyc", line 1704, in custom_popen
File "subprocess.pyc", line 711, in __init__
File "subprocess.pyc", line 948, in _execute_child
WindowsError: [Error 2] The system cannot find the file specified
我的代码有什么问题?如何在Windows中用python提取rar文件?
答案 0 :(得分:3)
作为rarfile
FAQ状态(并且通过堆栈跟踪中的subprocess
跟踪显而易见),
[rarfile]依赖于unrar命令行实用程序来进行实际的解压缩。
请注意,默认情况下,它希望它位于PATH中。如果unrar启动失败,则需要解决此问题。
因此从http://www.rarlab.com/rar_add.htm获取UnRAR并将其放在PATH中的某个位置(例如您运行脚本的目录)。
答案 1 :(得分:1)
看起来source_filename
没有指向有效的RAR文件,之前做了一点检查,只是为了确定:
import os.path
os.path.isfile(source_filename) # what's the value returned?
如果文件存在,则检查路径格式是否正确。例如,这不起作用:
source_filename = 'c:\documents\file.rar'
请改为尝试:
source_filename = 'c:\\documents\\file.rar'
甚至更好,请使用raw strings:
source_filename = r'c:\documents\file.rar'
答案 2 :(得分:0)
在Windows中使用python的一个常见问题是路径分隔符是\,但这是一个需要在Python中转义的特殊字符。如果您打印source_filename,您应该能够看到它是否设置正确。
e.g。
source_filename = 'c:\users\prosserc\documents\myfile.txt'
无效。以下是几种选择:
使用原始字符串:
source_filename = r'c:\users\prosserc\documents\myfile.txt'
或使用os.path.join加入eviornment变量,例如user_profile
source_filename = os.path.join(os.getenv('userprofile'), 'documents', 'myfile.txt')