首页 > 解决方案 > 是否可以在文件中找到所有 md5 哈希并将其保存到另一个文件中?

问题描述

我有一个 txt 文件(几 GB 大小!),我想从中提取 md5 哈希。这对我来说很容易,但是......单词之间每行的空格数量是不规则的。例如:

NUMBER(几个空格) LOGIN(几个空格) MAIL(几个空格) MD5 HASH(几个空格) DATE(几个空格) SOME USELESS CHARACTERS。

md5之后的所有数据都没用。我想从这个文件中提取所有 md5 哈希,并且只提取 md5。我不需要任何其他数据。如果登录、邮件和哈希之间有一定数量的空格,这将是一件容易的事,但是......我没有足够的经验。数据之间的空格数量可能会有所不同。

感谢所有帮助。

到目前为止,我设法使用以下代码将位于 此处的文件内容(md5hashes.txt) 更改为这种格式(lines.txt)

import io
import re

errors = 0

#name of file to store addresses
file_to_save = open("md5hashes.txt", 'w') # this file contains md5 hashes with other useless data
file_to_read = "lines.txt" #and there we will store only md5

print(f"Hello. Opening {file_to_read}")


with io.open(file_to_read, mode='r', encoding='utf8') as file_to_open:
data = file_to_open.readlines()

for data_in_file in data:
    file_to_save.write(str(data_in_file.split()))

file_to_open.close()
file_to_save.close()
print("All files closed.")

我认为这将删除空格并简化解析文件以删除其他无用数据。但不是。

有任何想法吗?

也许一个更好的主意是检查每个字符串是否正好有 32 个字符长并且只包含 af 字母和 0-9 位数字,然后将其提取到另一个文件中?

标签: pythonhashextractmd5

解决方案


>>> 'NUMBER  LOGIN     MAIL  MD5_HASH  DATE      SOME_USELESS_CHARACTERS'.split()
    ['NUMBER', 'LOGIN', 'MAIL', 'MD5_HASH', 'DATE', 'SOME_USELESS_CHARACTERS']

str.split(),即没有任何参数将连续的空白视为一个

编辑:使用lines.txt的数据:

with open('lines.txt') as f:
    hashes = [line.split()[3] for line in f]

print(hashes)

输出

['e2a18210956d33cd2f636d2cd9286e4a', '4f1d414c5f6c91858a5a9f997b56194a', '99d6341dbd215172886e40227c7960db', 'fa077d39cb67070d255b200196bfc7e6', '5469aba04997b10ce9cee08498eb0368', '9c8be11d1d1b76555dcbac30d6c6b19b', '067c10d420547bf07d40bc096ad12c74', 'c6983b366e2ff8a0ab159d6778cff745', '9f22f8432cf7554cc52706164a1d4191', '0a23eb155ee725dd5c4a52b34d91073d', 'a700028489912c64da295a8466cf8e5b', 'e6ac227d436afadddb8dab18a49d8051', 'b9be9adee29895765f1a48b0ea7d3d82', '8d84ed9be2bfb96b0332beb1c4d0c577', '46470f42630e4a603383a58b8ae4a1f7', '418b45086b2a216939705d36c0acf989', '56289f28e8816d2272f6452e7313a76f', '2004-09-14', 'acfda40bb16465ffc42a2c573f8a8d0d', '3dc5a9c8f6f3822de0634a4f5cd4ae8c', '25d55ad283aa400af464c76d713c07ad', 'e10adc3949ba59abbe56e057f20f883e', 'da2092eb7a8905c8f711650eb43ddba8', '1de164dbf6b484df90bfda65e2610dba', 'f87462bc136a9dbe6aa3ad802b45ecd2', '6e207e6c794467cb361b7b0aa32a7123', '37a58dd2291bb48bd2746b5aeb1c2999', '82203b49f312584c5fc6aa27954bb416', '20c9926ade8211bfac99a3b01852d32d', '1c91b775b4ef959426d78eacca908690', '3c61262142f9e33fd7ff96811c469c0f', '72acde4a88378f62cf580ed7024d7a0d', '6b1d24ff83a319070db95c6c84b9be31', '02051eaad6027fc861248a2f2f314bb3', '7d550855dcfa16e1af386b4fab05bc97', '64cb8e79efcab677bce933f037ee930e', 'fdcca1ac3b4e09d5be64c0ce93f6a894', 'fb9cf8cda3655922c953ee252c4ea92b', 'de0dfe3265f63b0fdcc3067e3b0ecc60']

您会注意到您的数据不一致 - 第 18 行缺少一封电子邮件。因此,索引 3 处的元素是日期,而不是哈希。由您决定这是否是示例数据中的故障(即您在匿名数据时将其删除)还是数据确实有问题


推荐阅读