rar文件模块在python 2.7中不起作用

时间:2013-09-12 14:37:57

标签: python

我有这样的代码

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文件?

3 个答案:

答案 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')