gpt4 book ai didi

python - 在 Python 中解析大的、可能压缩的文件

转载 作者:太空狗 更新时间:2023-10-30 01:05:18 24 4
gpt4 key购买 nike

我正在尝试逐行解析一个大文件以获取相关信息。我可能会收到未压缩或 gzip 文件(我可能需要在稍后阶段编辑 zip 文件)。

我正在使用下面的代码,但我觉得,因为我不在 with 语句中,所以我不是逐行解析文件,而是加载整个文件 file_content 到内存中。

if ".gz" in FILE_LIST['INPUT_FILE']:
with gzip.open(FILE_LIST['INPUT_FILE']) as input_file:
file_content = input_file.readlines()
else:
with open(FILE_LIST['INPUT_FILE']) as input_file:
file_content = input_file.readlines()

for line in file_content:
# do stuff

我应该如何处理这个问题有什么建议吗?我不希望将文件解压缩到代码块之外,因为这需要是通用的,而且我将不得不整理多个文件。

最佳答案

readlines 完整读取文件。所以大文件是不行的。

像您一样执行 2 个上下文 block ,然后在它们之外使用 input_file 句柄不起作用(对已关闭文件的操作)。

为了两全其美,我会对上下文 block 使用三元条件(确定是否必须使用 opengzip.open),然后迭代在线上。

open_function = gzip.open if ".gz" in FILE_LIST['INPUT_FILE'] else open
with open_function(FILE_LIST['INPUT_FILE'],"r") as input_file:
for line in input_file:

请注意,我添加了“r”模式以确保处理文本而不是二进制(gzip.open 默认为二进制)

备选方案:open_function 可以设为通用的,因此它不依赖于 FILE_LIST['INPUT_FILE']:

open_function = lambda f: gzip.open(f,"r") if ".gz" in f else open(f)

一旦定义,可以随意复用

with open_function(FILE_LIST['INPUT_FILE']) as input_file:
for line in input_file:

关于python - 在 Python 中解析大的、可能压缩的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45798574/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com