【发布时间】:2021-07-10 12:23:47
【问题描述】:
我必须遍历 30 个 zip 文件夹,每个 zip 文件夹有 50,000 - 90,000 个 jpeg 文件。理想情况下,我会遍历每个 zip 文件夹,因为解压缩每个文件夹会花费太长时间。对于每个文件,我需要打开每个文件,从中提取关键信息,并将信息存储到一个列表中。基于How to do multithreading on a folder with several files?,我尝试启用多处理以使事情变得更快,但是,我无法弄清楚。在下面的示例中,我目前正试图让它与一个文件夹一起工作,然后我需要弄清楚如何让它遍历所有 30 个 zip 文件夹。
import os
from zipfile import ZipFile
data_list = []
def image_processor(file):
with ZipFile("files101.zip") as zip_file:
with zip_file.open(file, "r") as img_file:
img_data = img_file.readlines(1) # data is available in beginning of each file
# Extract data #1
pattern_1 = r'IMG:\d{,3}'
if re.findall(pattern_1, str(img_data)):
img_extract = re.findall(pattern_1, str(img_data))[0]
else:
img_extract = np.nan
# Extract timestamp
time_pattern = r'Time:\s\d{2}-\d{2}-\d{4}\s\s\d{2}:\d{2}:\d{2}'
if re.findall(time_pattern, str(img_data)):
time_extract = re.findall(time_pattern, str(img_data))[0]
else:
time_extract = np.nan
# Create list
return data_list.append([img_extract, time_extract])
os.chdir(r"C:\\Users\\xxxxxx\\Desktop\\zip")
for folder in os.listdir():
file_list = ZipFile("files101.zip", "r").namelist()
with ProcessPool(processes=8) as pool:
pool.map(image_processor, file_list)
发生的情况是我的代码永远运行,就像它没有启用多处理一样。如果我需要做多线程,我有六个核心。任何建议将不胜感激。
【问题讨论】:
标签: python for-loop multiprocessing zip