遍历多个文件并打开它们

时间:2014-08-08 02:16:20

标签: python file traversal

我是python的新手并且不擅长它。我需要遍历一个包含压缩文件的大量目录列表。虽然这可以通过该方法完成,

for file in list:
 for filename in file:
  with open.gizp(filename) as fileopen:
   for line in fileopen:
     process

所花费的时间可能需要几天时间。我是否能够使用任何允许我同时遍历目录的其他部分以执行相同功能并且在遍历中没有重复的函数?

非常感谢任何帮助或指示

2 个答案:

答案 0 :(得分:0)

将繁重的处理移动到一个单独的程序,然后用子进程调用该程序以保持一定数量的并行进程运行:

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)

答案 1 :(得分:0)

您可以同时打开多个文件。例如:

files = [gzip.open(f,"rb") for f in fileslist]
processed = [process(f) for f in files]

(顺便说一句,请不要拨打您的文件列表&#34; list&#34;或文件列表&#34; file&#34;,因为他们是语言的保留字,并没有描述你的情况下对象的真实情况。)

现在它需要大约相同的时间,因为你总是一次处理一个。那么,您想要并行处理它们吗?然后,您要查看threadingmultiprocessing

您是否正在寻找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.htmlfileinput.hook_compressed似乎处理gzip)。