如何基于DD.MM.YY日期批量修改CSV中Aktiv字段值?
解决CSV中按自定义日期格式批量修改Aktiv字段的问题
方法一:用Python脚本直接处理CSV(推荐)
这种方式无需依赖数据库,直接对CSV文件做修改,适配2500-4000行的规模,灵活且不易出错。
import csv from datetime import datetime, timedelta # 计算30天前的基准日期 cutoff_date = datetime.now() - timedelta(days=30) # 替换成你的输入输出文件路径 input_csv = "source.csv" output_csv = "processed.csv" with open(input_csv, 'r', encoding='utf-8') as infile, \ open(output_csv, 'w', encoding='utf-8', newline='') as outfile: # 用分号作为分隔符读取CSV reader = csv.DictReader(infile, delimiter=';') writer = csv.DictWriter(outfile, fieldnames=reader.fieldnames, delimiter=';') writer.writeheader() for row in reader: try: # 把DD.MM.YY格式的字符串转成datetime对象 last_chan = datetime.strptime(row['LastChan'], '%d.%m.%y') # 满足条件则修改Aktiv字段 if last_chan < cutoff_date and row['Aktiv'] == 'true': row['Aktiv'] = 'false' except ValueError: # 遇到格式错误的日期时跳过修改(可根据需求调整逻辑) pass writer.writerow(row)
脚本说明:
- 自动保留原CSV的表头和所有字段
- 处理过程中会跳过格式无效的日期行,避免脚本崩溃
- 仅修改符合条件的
Aktiv字段,其他行保持原样
方法二:导入SQLite后处理日期格式问题
如果一定要用SQLite处理,可以先导入CSV,再通过SQL函数将自定义日期格式转换为标准格式后执行更新。
步骤1:创建SQLite表并导入CSV
用sqlite3命令行工具执行以下操作:
-- 创建表结构 CREATE TABLE assets ( SAP_Nu TEXT, Name TEXT, Version TEXT, Typ TEXT, Aktiv TEXT, IP TEXT, Srv TEXT, LastChan TEXT ); -- 导入CSV(注意替换文件路径) .mode csv .separator ';' .import source.csv assets
步骤2:执行更新语句
通过字符串拆分将DD.MM.YY转换为YYYY-MM-DD格式,再比较日期:
UPDATE assets SET Aktiv = 'false' WHERE Aktiv = 'true' AND DATE( '20' || SUBSTR(LastChan, 7, 2) || '-' || SUBSTR(LastChan, 4, 2) || '-' || SUBSTR(LastChan, 1, 2) ) < DATE('now', '-30 days');
注意事项:
- 假设
LastChan的年份是2000年后的(即YY对应20YY),如果包含19xx的年份,需要调整年份拼接逻辑 - 导入时确保CSV的分隔符是分号,和创建表时的设置一致
内容的提问来源于stack exchange,提问作者Petersenf87
相关产品推荐
相关产品推荐

