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

如何使用Python脚本将TSV文件按日期字段排序并覆盖原文件

TSV按日期字段排序并覆盖原文件的Python实现方案

核心思路

直接在现有Python脚本中增加排序逻辑:

  1. 读取TSV所有行数据
  2. 以第4列(索引为3)的日期字段为依据排序,这里因为日期格式是YYYY-MM-DD,字符串本身的字典序和时间顺序完全一致,不需要额外转datetime对象就能直接排序,性能更好
  3. 排序后直接覆盖写入原文件
  4. 后续校验逻辑直接取排序后首尾行的日期做范围判断即可

修改后完整代码

import csv
import datetime
import os

# 你之前定义的logger、edgar_path、filename变量保持不变
def edgar_filings_download(date): 
    try:
        file_path = os.path.join(edgar_path, filename)
        # 读取TSV文件所有行
        with open(file_path, 'r', encoding='utf-8') as f:
            tsv_reader = csv.reader(f, delimiter='|')
            tsv_rows = [row for row in tsv_reader if row] # 过滤空行
        
        # 按日期降序排序:最新日期在第一行,最早日期在最后一行,适配你现有校验逻辑的取值规则
        # 按第4列(索引3)排序,reverse=True表示降序
        tsv_rows.sort(key=lambda x: x[3], reverse=True)
        
        # 排序后直接覆盖原文件
        with open(file_path, 'w', encoding='utf-8', newline='') as f:
            tsv_writer = csv.writer(f, delimiter='|')
            tsv_writer.writerows(tsv_rows)
        
        # 原有校验逻辑保持不变
        _CHECK = datetime.datetime.strptime(date, "%Y-%m-%d")
        start_date = datetime.datetime.strptime(tsv_rows[-1][3], "%Y-%m-%d")
        end_date = datetime.datetime.strptime(tsv_rows[0][3], "%Y-%m-%d")
        if start_date <= _CHECK <= end_date:
            logger.debug('pass')
        else:
            logger.debug('no pass')
    except IndexError:
        logger.error("TSV文件为空或格式不符合要求,缺少日期字段")
    except Exception as e:
        logger.error(e)

注意事项

  • 运行前建议先备份原TSV文件,避免覆盖出错导致数据丢失
  • 如果需要调整为日期升序排序(最早日期在第一行),把sort方法的reverse=True改为reverse=False即可,同时需要对应调整校验逻辑中start_date和end_date的取值索引
  • 代码默认过滤了空行,避免空行导致排序或校验报错

内容的提问来源于stack exchange,提问作者Prosy A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 06:21:02