遍历多个文件并打开它们

2024-09-30 22:28:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我对python还不熟悉,不太熟悉。我需要遍历一个包含压缩文件的目录的巨大列表。虽然这可以通过方法实现

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

所花的时间是几天。我是否可以使用任何允许我同时遍历目录的其他部分的函数来执行相同的函数,并且遍历中没有任何重复?你知道吗

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


Tags: 方法函数in目录列表foraswith
2条回答

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

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)。您还可以执行以下操作:

for folder in folderslist:
    fileslist = os.listdir(folder)
    for file in fileslist:
        ....

您对fileinput迭代来自多个输入流的行感兴趣吗?(https://docs.python.org/2/library/fileinput.htmlfileinput.hook_compressed似乎处理gzip)。你知道吗

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

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)

相关问题 更多 >