python中文件打开缓慢



目前,我正在编写程序,需要加载超过13K "*.json"大小不一的文件,从几行到10万行不等。阅读看起来像:

[read_one_JSON(p) for p in filenames]
def read_one_JSON(path: str):
with open(path, encoding='utf-8') as fh:
data = json.load(fh)
return File(data["_File__name"], data['_File__statements'], data['_File__matches'])

我加载文件,将它传递给类file并读取另一个文件。目前大约需要2分20秒。我发现,当我把数据处理移到类中,只生成:

[read_one_JSON(p) for p in filenames]
def read_one_JSON(path: str):
with open(path, encoding='utf-8') as fh:
data = json.load(fh)

它将时间缩短了10秒,达到2分10秒。然后我还删除了json。加载以查看导致阅读时间的原因。所以,当离开时,只需:

[read_one_JSON(p) for p in filenames]
def read_one_JSON(path: str):
with open(path, encoding='utf-8') as fh:

而不读取数据,它仍然持续1分45秒。意思是,打开文件很慢。有没有办法加快进程的打开部分,而不把所有东西放在一个文件或并行化?这是一个选项,但我想知道是否还有其他办法。

在此之前,我意识到这样的瓶颈,我尝试过像ujsonorjsonmsgspec这样的库,但由于开始阶段很慢,它只产生了很小的差异。

在当前目录创建13000个文件:

import json
from tqdm import tqdm  # pip install tqdm
for i in tqdm(range(13_000)):
filename = f"data_{i}.json"
data = {"filename": filename}
with open(filename, "w") as file:
json.dump(data, file)
100%|██████████| 13000/13000 [00:01<00:00, 8183.74it/s]

这意味着它在我的电脑上运行了不到2秒。tqdm是查看吞吐量的一种非常简单的方法。脚本生成如下文件:

{"filename": "data_0.json"}

然后阅读它们:

import json
from tqdm import tqdm  # pip install tqdm
for i in tqdm(range(13_000)):
filename = f"data_{i}.json"
with open(filename, "rt") as file:
data = json.load(file)
print(data)
100%|██████████| 13000/13000 [00:00<00:00, 16472.00it/s]
{'filename': 'data_12999.json'}

这意味着它们都在不到一秒的时间内被读取。

也许它来自于你读的文件的大小。如果您有很多大文件,确实会花费更多的时间。但是你的磁盘似乎并不是导致速度变慢的唯一原因。

最新更新