You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从文本文件中根据日期查找对应发票编号

问题描述

我用Excel生成了数百组发票编号与对应周末结束日期的配对数据,转成TXT文件后每行格式如下:

1001,09/26/20,
1002,10/03/20,
1003,10/10/20,
1004,10/17/20,
1005,10/24/20,

现在需要实现:输入指定日期,找到对应的发票编号;如果把发票编号调整到日期右侧更方便实现,也可以调整格式。

我已经写了部分格式化日期并搜索文件的代码,但不知道后续怎么处理:

# declare the correct formatted date to search the file for
date_search_formatted = date_input.strftime("%m/%d/%Y")
# open the text file
file = open(r"Invoice_doc_01.txt", "r")
# read the text file
file.read()
# search for the string
file.find(date_search_formatted)

# save the text file
file.close()
问题分析

原代码有几个关键问题:

  • file.read()读取了文件内容,但没有把内容保存到变量里,后续无法对内容进行操作
  • 文件对象没有find()方法,这个方法属于字符串类型
  • 直接读取整个文件再搜索,不如逐行处理高效,还能直接提取对应发票号
解决方案

方案1:保留原格式(发票号在左)

直接逐行读取文件,拆分每行内容,匹配日期后提取发票号:

from datetime import datetime

# 示例:这里是用户输入的目标日期,可根据实际情况替换
date_input = datetime(2020, 9, 26)
# 注意原文件日期是两位年份,用%y而非%Y
date_search_formatted = date_input.strftime("%m/%d/%y")  

invoice_number = None
# 用with语句自动管理文件关闭,比手动close更安全可靠
with open(r"Invoice_doc_01.txt", "r") as file:
    for line in file:
        line = line.strip()  # 去掉换行符和首尾空格
        if not line:
            continue  # 跳过空行
        # 按逗号拆分每行内容
        parts = line.split(",")
        # 原格式是「发票号,日期,」,所以parts[0]是发票号,parts[1]是日期
        if parts[1] == date_search_formatted:
            invoice_number = parts[0]
            break  # 找到目标后直接跳出循环,提升效率

if invoice_number:
    print(f"找到对应发票编号:{invoice_number}")
else:
    print("未找到该日期对应的发票编号")

方案2:调整格式(发票号在右)

如果把文件格式改成日期,发票号,,代码逻辑类似,只是拆分后取对应位置的值:
修改后的文件示例:

09/26/20,1001,
10/03/20,1002,

对应代码:

from datetime import datetime

date_input = datetime(2020, 9, 26)
date_search_formatted = date_input.strftime("%m/%d/%y")

invoice_number = None
with open(r"Invoice_doc_01.txt", "r") as file:
    for line in file:
        line = line.strip()
        if not line:
            continue
        parts = line.split(",")
        # 调整格式后「日期,发票号,」,parts[0]是日期,parts[1]是发票号
        if parts[0] == date_search_formatted:
            invoice_number = parts[1]
            break

if invoice_number:
    print(f"找到对应发票编号:{invoice_number}")
else:
    print("未找到该日期对应的发票编号")
额外优化建议

如果需要频繁执行搜索操作,建议先把文件内容加载到字典中,后续搜索直接查字典,效率会更高:

from datetime import datetime

# 先构建日期到发票号的映射字典
date_to_invoice = {}
with open(r"Invoice_doc_01.txt", "r") as file:
    for line in file:
        line = line.strip()
        if not line:
            continue
        parts = line.split(",")
        date_to_invoice[parts[1]] = parts[0]

# 后续搜索直接查询字典
date_input = datetime(2020, 9, 26)
date_search_formatted = date_input.strftime("%m/%d/%y")
invoice_number = date_to_invoice.get(date_search_formatted)

if invoice_number:
    print(f"找到对应发票编号:{invoice_number}")
else:
    print("未找到该日期对应的发票编号")

内容的提问来源于stack exchange,提问作者Parker Scott

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:35:15