【发布时间】:2022-11-17 18:03:32
【问题描述】:
我正在使用 databricks 中的 python 使用正则表达式从大型 pdf 文件中提取数据。该数据采用长字符串形式,我正在使用字符串拆分函数将其转换为熊猫数据框,因为我希望最终数据为 csv 文件。但是在执行 line.split 命令时,命令运行大约需要 5 个小时,我正在寻找优化它的方法。我是 python 的新手,我不确定应该查看代码的哪一部分以减少运行命令的时间。
for pdf in os.listdir(data_directory):
# creating an object
file = open(data_directory + pdf, 'rb')
# creating file reader object
fileReader = PyPDF2.PdfFileReader(file)
num_pages = fileReader.numPages
#print("total pages = " + str(num_pages))
extracted_string = "start of file"
current_page = 0
while current_page < num_pages:
#print("adding page " + str(current_page) + " to the file")
extracted_string += (fileReader.getPage(current_page).extract_text())
current_page = current_page + 1
regex_date = "\d{2}\/\d{2}\/\d{4}[^\n]*"
table_lines = re.findall(regex_date, extracted_string)
上面的代码是从PDF中获取数据
#create dataframe out of extracted string and load into a single dataframe
for line in table_lines:
df = pd.DataFrame([x.split(' ') for x in line.split('\n')])
df.rename(columns={0: 'date_of_import', 1: 'entry_num', 2: 'warehouse_code_num', 3: 'declarant_ref_num', 4: 'declarant_EORI_num', 5: 'VAT_due'}, inplace=True)
table = pd.concat([table,df],sort= False)
这部分代码占用了大量时间。我尝试了不同的方法从这些数据中获取数据框,但上面的方法对我来说效果最好。我正在寻找更快的方式来运行这段代码。
https://drive.google.com/file/d/1ew3Fw1IjeToBA-KMbTTD_hIINiQm0Bkg/view?usp=share_linkpdf文件供参考
【问题讨论】:
-
我对你的数据框的结构有任何想法,但每次处理一行时实例化一个新的数据框对我来说很奇怪!
-
这个列的定义会改变吗?
{0: 'date_of_import', 1: 'entry_num', 2: 'warehouse_code_num', 3: 'declarant_ref_num', 4: 'declarant_EORI_num', 5: 'VAT_due'}请发布示例:数据框的第一行。
标签: python