在文本文件中搜索和捕获字典值

-1 投票
1 回答
34 浏览
提问于 2025-04-14 16:40

我现在遇到一个问题,就是从一个文本文件中提取特定的数据。

我有一个文本文件,里面包含一些信息。

比如说:

公司名称 GmbH, 测试街 24, 01000 示例城 客户编号 11111111 发票编号 22222

发票地址 公司名称 2 mbH, 测试2街 11, 01001 示例2城 订单编号 555555 订单日期 01.01.1999

所以,我有不同格式的类似信息。有些文件里有发票编号,有些文件里则写着“Inv. Number: 44444”。我想把这些信息都提取出来。我觉得可以通过创建一个字典来抓取这些信息,像这样:

`values_dict= {'Customer Number':'customer nr.', 'customer number', 
'cus. nr.', ... , 'Order Number':'order number', 'Order nr' ,....}`

那么,我该如何使用这个字典从文本文件中提取特定的值呢?

我希望得到的输出是这样的:

订单编号:555555 客户编号:11111111 发票编号:22222 订单日期:01.01.1999

公司信息:公司名称 GmbH, 测试街 24, 01000 示例城 发票公司信息:公司名称 2 mbH, 测试2街 11, 01001 示例2城

1 个回答

0

Python中的re模块支持正则表达式,这让你可以根据特定的模式来搜索、匹配或拆分字符串。简单来说,正则表达式就是一种用来描述字符串规则的工具,可以帮助你找到想要的内容。想了解更多,可以查看Python re模块的官方文档。

import re

# Your dictionary of keys with their possible variations
values_dict = {
    'Customer Number': ['Customer Nr.', 'customer number', 'cus. nr.', 'Customer Number'],
    'Order Number': ['Order number.', 'Order nr', 'order number', 'Order Number'],
    'Invoice Number': ['Invoice Nr.', 'Inv. Number:', 'invoice number', 'Invoice Number'],
    'Order Date': ['Order Date'],
    'Company Information': ['Company Name'],
    'Invoice Company Information': ['Invoice Adress Company Name'] # Add more variations as needed
}

# Function to extract information based on the dictionary
def extract_information(text, values_dict):
    results = {}

    for key, variations in values_dict.items():
        for variation in variations:
            pattern = rf"{variation}[:]?[\s]*(.*)"
            match = re.search(pattern, text, re.IGNORECASE)
            if match:
                results[key] = match.group(1).strip()
                break 

    return results

text = """Company Name GmbH, Teststraße 24 , 01000 Sampleort 
Customer Nr. 11111111 
Invoice Nr. 22222

Invoice Adress Company Name 2 mbH, Test2straße 11, 01001 Sample2ort
Order number. 555555 
Order Date 01.01.1999"""

info = extract_information(text, values_dict)

for key, value in info.items():
    print(f"{key}: {value}")

撰写回答