Python新手在这里。我正在尝试搜索大型文档并提取文本。我需要的实际数据是括号内的值:xx(bb) xx(bb) xx 可以是任何数字组合,而 bb 是任何包含数字的字符,因此您可以拥有包含 1(YJ) 2(*) 的行。最终目标是将括号内的字符与集合中的值进行比较:{'hO', 'Ih', 'Dn', '8', 'MF', 'dC', '6', 'RE', 'WM'、'Dh'、'5'}。所以我会检查 YJ 和 * 是否在集合内
为此,我编写了几个方法来解析这个巨大的文件。问题是,这需要很长时间。对于大约 1.5GB 的文件,需要 49 秒。对于大于 5GB 的文件,搜索需要 5 分钟:
方法 1 有效并打印出该行,但与此处的所有方法一样,它很慢:
with open(filename, 'rb', buffering=102400) as f:
time_data_count = 0
for line in f:
# if b'(X,Y)' in line:
# print(line)
if re.search(b'\d+\(.+\)\s+\d+\(.+\)', line) :
print(line)
方法 2。此方法的另一个问题是它总是不返回任何内容。为什么?
with open(filename, 'rb') as f:
#text = []
while True:
memcap = f.read(102400)
if not memcap:
break
text = re.search(b'\d+\(.+\)\s+\d+\(.+\)',memcap)
if text is None:
print("none")
方法 3:除非文件小于 1GB,否则仅打印 1 个元素的列表。为什么是这样?:
with open(filename, 'rb') as f:
time_data_count = 0
text = []
while True:
memcap = f.read(102400)
if not memcap:
break
text = re.findall(b'\d+\(.+\)\s+\d+\(.+\)',memcap)
print(text)
这就是我写的三种方法。只有 1 可以正常工作。但他们都有一个慢的问题。Python Regex 一般是不是很慢?有没有不同的方法来获得我需要的值类型而不必使用正则表达式?我认为使用二进制和文件缓冲区会有所帮助,但这已经尽可能快了。请帮忙