python - 简单的python脚本,多线程?
问题描述
我有一个简单的 python 脚本,它从两个 .txt 文件中读取并将输出保存在一个新的文本文件中。
这就是我的代码的样子:
import os
with open("users.txt", encoding="utf-8") as f:
users = f.readlines()
users = [x.strip() for x in users]
with open("users1.txt", encoding="utf-8") as f:
passes = f.readlines()
passes = [x.strip() for x in passes]
results = []
for user in users:
h = user[user.find(':') + 1:]
for p in passes:
if p[:p.find(':')] == h:
results.append((user[:user.find(':')], p[p.find(':') + 1:]))
passes.remove(p)
break
with open('results.txt', 'w+', encoding="utf-8") as f:
for item in results:
f.write(f"{item[0]}:{item[1]}\n")
user.txt 有大约 3-10M 行。这当然需要很长时间来处理,我说 1-3 个小时。我认为唯一的原因是脚本在单个线程中运行。我做了一些挖掘,我没有想法。有没有办法让这个简单的脚本在超过 1 个线程上运行?它会加快这个过程吗?
谢谢!
解决方案
如果您首先将通行证转换为某种字典,它将为您节省大量时间。我不完全理解您的代码,但似乎每个user
都pass
嵌入了某种 id 或密钥,并且您正在寻找匹配的 id。
将通行证转换为字典
my_dictionary = { pass[:pass.find(':')] : pass for pass in passes }
你的外循环是:
for user in users:
id = user[user.find(':') + 1:]
if id in my_dictionary:
pass = my_dictionary[id]
.... whatever you do with user and pass ...
del my_dictionary[id]
单个字典查找而不是嵌套循环。
推荐阅读
- c++ - 假装元素的自定义迭代器在向量中
- android - netflix 或 google 等视频播放器如何处理显示/隐藏视频播放器控件?
- type-conversion - 比较任意两项最有效的运算符是什么?
- reactjs - 为什么 mobx observable 在递归组件中未定义?
- java - 为什么我会收到 InputMismatchException?
- ruby-on-rails - 不使用 RAILS_ENV=development 时连接到 Postgres docker 映像的问题
- json - Eventbride API time_filter 参数不起作用
- firebase - Firebase 电子邮件验证 Flutter
- java - 如何使 JavaFX TreeView 和 TreeItem 可序列化?
- python - 解压 Numpy 数组列表