我有超过200,000个txt文件,其中包含我需要提取的数据,例如地址,名称和付款金额。 考虑到项目的规模以及我需要提取的数据的复杂性,最好的方法是什么?
我目前正在尝试使用正则表达式模块来逐个搜索每个文件以获取相关信息。这就是我所拥有的:
BBL_raw = re.compile(r'''
Borough,\s+[Bb]lock\s+&\s+[Ll]ot\:\s+\w+\s+\((\d)\),\s+(\d{5}),\s+(\d{4})\s+
''', re.VERBOSE)
BBLs = []
for filename in filepaths:
with open(filename, 'r') as readit:
readfile = readit.read().replace('\n','')
bblsearch = BBL_raw.search(readfile)
tup = bblsearch.groups()
string = '\\'.join(tup)
BBLs.append(string)
我可以想象,如果我要扫描所有250,000个文件,这将非常繁琐并且需要很长时间才能运行。我什至不确定这是否可行。 我在下面也有一个参考文档,但是对Python来说还很陌生,我很难理解它,无法适应我的用途。
https://github.com/talos/nyc-stabilization-unit-counts/blob/master/parse.py
答案 0 :(得分:0)
我将使用熊猫来管理数据,您可以在此处进行检查:
https://pandas.pydata.org/pandas-docs/stable/getting_started/10min.html
关于文件的提取,您可以运行多个线程来 try 加快速度。 但是请记住,创建线程会产生开销。另外,由于读取是基于I / O的,因此最终可能会减慢该过程。
在此处查看有关线程的更多信息: https://docs.python.org/3/library/threading.html
关于在Python上使用线程的另一个问题是关于GIL,请查看有关GIL的参考:https://docs.python.org/3/c-api/init.html#thread-state-and-the-global-interpreter-lock
阅读Mike McKerns的解决方案还可以帮助您: https://stackoverflow.com/a/28613077/10473393