Python如何拆分收据文本行并写入CSV对应单元格?
收据文本行拆分逻辑实现
你可以通过正则表达式匹配金额特征完成拆分,兼容OCR识别常见的标点误差、空格冗余场景,实现代码如下:
核心拆分函数实现
import re def splitThisIntoCells(line: str): # 正则规则:兼容中英文冒号分隔、带/不带$符号、整数/小数金额 pattern = r'^(.*?)\s*[::]\s*(\$?\d+(?:\.\d+)?)\s*$' match_res = re.match(pattern, line) if match_res: cell_name = match_res.group(1).strip() money = match_res.group(2).strip() # 如果你只要纯数字不要$,可以加一行money = money.lstrip('$') return cell_name, money # 兜底逻辑:匹配失败时返回原行和空值,你也可以根据需求改为跳过该行 return line.strip(), ''
优化写入CSV的方式
不建议直接拼接字符串写入文件,避免内容本身包含逗号时打乱CSV格式,推荐用Python内置的csv模块处理:
import csv # 示例文本 text = [ "Trip fare: $2", "Meal:$15.99", "Parking fee: 8", "Hotel: 129.5" ] with open('receipt.csv', 'w', encoding='utf-8', newline='') as f: writer = csv.writer(f) # 可选写入表头 writer.writerow(['消费项目', '金额']) for line in text: cell_name, money = splitThisIntoCells(line) # 只写入金额非空的行 if money: writer.writerow([cell_name, money])
如果你的收据格式没有冒号分隔,是靠空格区分消费项目和金额(比如Coffee $4.5),只需要把正则规则替换为:
pattern = r'^(.*?)\s+(\$?\d+(?:\.\d+)?)\s*$'
内容的提问来源于stack exchange,提问作者Winston
相关产品推荐
相关产品推荐

