我是python的新手,对它并不熟悉。我需要遍历一个巨大的目录列表,其中包含压缩文件。虽然这可以通过该方法来完成,
for file in list:
for filename in file:
with open.gizp(filename) as fileopen:
for line in fileopen:
process所需的时间可能需要几天。我是否可以使用任何允许我同时遍历目录的其他部分的函数来执行相同的函数,并且在遍历过程中不会有任何重复?
任何帮助或指导都将不胜感激。
发布于 2014-08-08 10:42:09
将繁重的处理转移到单独的程序中,然后使用子进程调用该程序,以保持一定数量的并行进程运行:
import subprocess
import time
todo = []
for file in list:
for filename in file:
todo.append(filename)
running_processes = []
while len(todo)>0:
running_processes = [p for p in running_processes if p.poll() is None]
if len(running_processes)<8:
target = todo.pop()
running_processes.append( subprocess.Popen(['python','process_gzip.py',target]) )
time.sleep(1)发布于 2014-08-08 10:43:27
您可以同时打开多个文件。例如:
files = [gzip.open(f,"rb") for f in fileslist]
processed = [process(f) for f in files](顺便说一句,不要称您的文件列表为"list",或文件列表为"file",因为它们是语言的保留字,并不描述您的情况下对象的真正含义)。
现在它将花费大约相同的时间,因为您总是一次一个地处理它们。那么,你想要并行化的是它们的处理吗?然后,您需要查看threading或multiprocessing。
您是否正在寻找遍历目录的os.path.walk?(https://docs.python.org/2/library/os.path.html)。您还可以执行以下操作:
for folder in folderslist:
fileslist = os.listdir(folder)
for file in fileslist:
....您是否有兴趣使用fileinput遍历多个输入流中的行?(https://docs.python.org/2/library/fileinput.html、fileinput.hook_compressed似乎处理gzip)。
https://stackoverflow.com/questions/25195143
复制相似问题