2

我有这样的代码

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

4

3 回答 3

3

正如rarfile常见问题解答所述(并且subprocess堆栈跟踪中的痕迹很明显),

[rarfile] 依赖于 unrar 命令行实用程序来进行实际的解压缩。

请注意,默认情况下它希望它位于 PATH 中。如果 unrar 启动失败,您需要修复此问题。

因此,从http://www.rarlab.com/rar_add.htm获取 UnRAR并将其放在 PATH 中的某个位置(例如运行脚本的目录)。

于 2013-09-12T14:59:36.793 回答
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'

或者更好的是,使用原始字符串

source_filename = r'c:\documents\file.rar'
于 2013-09-12T14:41:49.310 回答
0

在 Windows 中使用 python 的一个常见问题是路径分隔符是 \,但这是一个特殊字符,需要在 Python 中进行转义。如果您打印 source_filename,您应该能够查看它是否设置正确。

例如

source_filename = 'c:\users\prosserc\documents\myfile.txt'

将无法正常工作。这里有几个选择:

使用原始字符串:

source_filename = r'c:\users\prosserc\documents\myfile.txt'

或使用 os.path.join 加入环境变量,例如 user_profile

source_filename = os.path.join(os.getenv('userprofile'), 'documents', 'myfile.txt')
于 2013-09-12T14:53:32.970 回答