我正在尝试将PDF银行摘录转换为csv。我是python的新手,但是我设法从pdf中提取文本。我以类似以下内容结束:
AMAZON 23/12/2019 15:40 -R $ 100,00 R $ 400,00信用 某些餐厅23/12/2019 14:00 -R $ 10,00 R $ 500信用 从John Doe收到22/12/2019 15:00 R $ 510 R $ 500,00 03游戏22/12/2019 15:00 R $ 10 R $ 10,00借记卡
我想要这个输出: AMAZON; 23/12/2019; -100,00 Some Restaurant; 23/12/2019; -10,00 从John Doe收到; 22/12/2019; 510 03游戏; 22/12/2019; 10
第一个字段的大小不同,我不需要时间和货币格式。我不需要最后2个字段。
到目前为止,我有以下代码(仅从PDF中提取文本):
import pdfplumber
import sys
url = sys.argv[1]
pdf = pdfplumber.open(url)
pdf_pages = len(pdf.pages)
for i in range(pdf_pages):
page = pdf.pages[(i)]
text = page.extract_text()
print(text)
pdf.close()
谁能给我一些指示?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
要将提取的PDF文本转换为所需的CSV格式,您需要进行几个处理步骤:解析文本、清洗数据、重组结构并最终写入CSV文件。以下是一个基于您提供的代码和需求的示例Python脚本:
import pdfplumber
import csv
import sys
import re
def clean_amount(amount_str):
"""清理并标准化金额字符串"""
amount = re.sub(r'[^\d,]', '', amount_str) # 移除非数字和逗号
return amount.replace(',', '.') # 将逗号替换为小数点以符合标准数值格式
def process_text(text):
"""从原始文本中提取所需信息并重组为列表"""
lines = text.split('\n')
data_rows = []
for line in lines:
parts = line.split(' -')
if len(parts) == 2: # 确保行包含交易信息
description, details = parts
date, time, _, amount_with_sign, _ = details.split()
amount = clean_amount(amount_with_sign)
# 注意:根据正负号调整金额
amount = float(amount) * (-1 if amount_with_sign.startswith('-') else 1)
# 重组为期望的结构
data_rows.append([description.strip(), date, f"{amount:.2f}"])
return data_rows
url = sys.argv[1]
pdf = pdfplumber.open(url)
pdf_pages = len(pdf.pages)
all_data = []
for i in range(pdf_pages):
page = pdf.pages[i]
text = page.extract_text()
cleaned_data = process_text(text)
all_data.extend(cleaned_data)
pdf.close()
# 写入CSV文件
csv_file_path = 'bank_transactions.csv'
with open(csv_file_path, 'w', newline='', encoding='utf-8') as csvfile:
csvwriter = csv.writer(csvfile, delimiter=';')
csvwriter.writerow(['Description', 'Date', 'Amount']) # CSV头
csvwriter.writerows(all_data)
print(f"数据已成功转换并保存至 {csv_file_path}")
这个脚本首先定义了两个辅助函数:clean_amount
用于清理并标准化金额值,而process_text
则负责从每行文本中提取描述、日期和金额,并重组为一个列表。之后,脚本遍历PDF中的所有页面,提取文本并使用process_text
处理每一页面的数据,最后将所有数据写入到CSV文件中。
请注意,由于您的银行摘录的具体格式可能与示例有所不同,您可能需要微调正则表达式或数据处理逻辑以适应实际的文本结构。