首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历多个文件并打开它们

遍历多个文件并打开它们
EN

Stack Overflow用户
提问于 2014-08-08 10:16:20
回答 2查看 58关注 0票数 0

我是python的新手,对它并不熟悉。我需要遍历一个巨大的目录列表,其中包含压缩文件。虽然这可以通过该方法来完成,

代码语言:javascript
复制
for file in list:
 for filename in file:
  with open.gizp(filename) as fileopen:
   for line in fileopen:
     process

所需的时间可能需要几天。我是否可以使用任何允许我同时遍历目录的其他部分的函数来执行相同的函数,并且在遍历过程中不会有任何重复?

任何帮助或指导都将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2014-08-08 10:42:09

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

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2014-08-08 10:43:27

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

代码语言:javascript
复制
files = [gzip.open(f,"rb") for f in fileslist]
processed = [process(f) for f in files]

(顺便说一句,不要称您的文件列表为"list",或文件列表为"file",因为它们是语言的保留字,并不描述您的情况下对象的真正含义)。

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

您是否正在寻找遍历目录的os.path.walk?(https://docs.python.org/2/library/os.path.html)。您还可以执行以下操作:

代码语言:javascript
复制
for folder in folderslist:
    fileslist = os.listdir(folder)
    for file in fileslist:
        ....

您是否有兴趣使用fileinput遍历多个输入流中的行?(https://docs.python.org/2/library/fileinput.htmlfileinput.hook_compressed似乎处理gzip)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25195143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档