python - 如何在 python 中更快地操作大文件?
问题描述
我必须遍历 30GB 的文件(其中有 30 个),而 500mb 大约需要 15 分钟。知道我正在逐行遍历每一行,我该如何优化性能?
Python
import json
import os
def file_subreddit_comments(rfname,wfname):
with open(rfname, 'r', encoding="utf8") as rf:
with open(wfname, 'w', encoding="utf-8") as wf:
for i, l in enumerate(rf):
d = json.loads(l)
link_id = d["link_id"]
for lsi in list_submission_id:
constructed_link_id = "t3_" + lsi
if link_id == constructed_link_id:
wf.write(l)
defaultFilePath = r'D:\Users\Jonathan\Desktop\Reddit Data\Run Comments\\'
directory = os.fsencode(defaultFilePath)
list_submission_id = []
submission_id_file = r'D:\Users\Jonathan\Desktop\Reddit Data\Manipulated Data-09-03-19-Final\UniqueIDSubmissionsList-09-03-2019.txt'
with open(submission_id_file, "r", encoding="utf8") as sif:
for i, l in enumerate(sif):
list_submission_id.append(l.rstrip())
for file in os.listdir(directory):
filename = os.fsdecode(file)
comment_path_read = defaultFilePath + filename
comment_path_save = defaultFilePath + filename + "_ext_com.txt"
file_subreddit_comments(comment_path_read,comment_path_save)
print(filename)
这submission_id_file
是一个包含大约 1000 个关键字的列表,它需要验证每个关键字的值constructured_link_id
是否在列表中。
解决方案
多线程和多处理可能是上面 Thom 提出的解决方案。好吧,至少它减少了我执行任务的时间。12 个核心 = 12 个文件同时操作。
推荐阅读
- python - 调整窗口大小时如何调整布局?
- c# - 通过将状态存储到作用域局部变量中来避免关闭快速路径
- database - 这种可变长度日期编码格式是什么?
- github - 如何在 GitHub 上设置文件以供下载?
- c++ - 如何在 constexpr 中进行编译时错误检查?
- python - 为什么当输入到下一个变换时 GroupIntoBatches 输出会被细分
- ios - 如果不是从 xcode 运行,iOS 应用程序缺少 DYLD
- matplotlib - 如何使用 Embed set_image 将图像从 MatPlotlib 嵌入到 Discord.py 而不存储图像?
- javascript - React-Native:仅在下一个动作/重新渲染时影响视图的状态变化?
- jquery - 从无线电输入全局保存变量