【发布时间】:2014-09-22 05:12:55
【问题描述】:
我必须提取数百个 tar.bz 文件,每个文件大小为 5GB。于是尝试了以下代码:
import tarfile
from multiprocessing import Pool
files = glob.glob('D:\\*.tar.bz') ##All my files are in D
for f in files:
tar = tarfile.open (f, 'r:bz2')
pool = Pool(processes=5)
pool.map(tar.extractall('E:\\') ###I want to extract them in E
tar.close()
但是代码有类型错误: TypeError: map() 至少需要 3 个参数(给定 2 个)
我该如何解决? 有什么加快提取速度的想法吗?
【问题讨论】:
-
我打赌你的问题是 I/O 而不是代码。
map错误很明显:您必须提供一个函数和该函数的参数列表。您的案例:map(extractall, [list, of, files]) -
如何提供目标目录?地图(提取全部,[列表,文件])
-
每个文件的目标不同?
[(list, dest), (of, dest2), (files, dest3)]。同一个目标?为extractall创建一个functools.partial。 -
实际上每个文件的目标相同。