使用Python自动修正CSV文件中的出发日期问题
当然可以用Python自动修正!给新手的一步步指南
完全没问题,这不仅能实现,还是个非常适合Python新手的入门练习,我会把每一步讲得清清楚楚,你跟着做就行。
先理清楚核心逻辑
咱们要解决的问题很明确:当Departure_Time早于Arrival_Time时,Departure_Date需要加一天(比如到达是2017/01/01 23:30,出发是00:30,说明出发是第二天的00:30,所以日期要改成2017/01/02)。
需要用到的Python工具(都是内置的,不用额外安装!)
csv模块:专门用来读写CSV文件,Python自带,不用pip安装datetime模块:用来处理日期和时间,能轻松把字符串转成可计算的日期对象,还能实现加一天的操作
具体代码实现(带详细注释)
先把你的示例数据存成一个小的测试CSV文件(比如叫test_data.csv),然后运行下面的代码,先验证效果,没问题再处理3000行的大文件。
# 导入需要的模块 import csv from datetime import datetime, timedelta # 处理CSV文件的核心代码 # 用with语句打开文件,会自动关闭,避免忘记关文件的问题 with open('test_data.csv', 'r', newline='', encoding='utf-8') as input_file, \ open('corrected_data.csv', 'w', newline='', encoding='utf-8') as output_file: # 创建CSV读取器和写入器 # 注意:你的数据是用空格分隔的,所以delimiter=' ';如果实际是逗号分隔,改成delimiter=',' csv_reader = csv.reader(input_file, delimiter=' ') csv_writer = csv.writer(output_file, delimiter=' ') # 先读取表头(第一行),直接写入新文件 header = next(csv_reader) csv_writer.writerow(header) # 遍历每一行数据 for row in csv_reader: # 提取四个字段:到达日期、到达时间、出发日期、出发时间 arr_date, arr_time, dep_date, dep_time = row # 把日期+时间的字符串转换成datetime对象(方便比较和计算) # "%Y/%m/%d %H:%M"是你的日期时间格式,要和数据里的格式对应 arrival_datetime = datetime.strptime(f"{arr_date} {arr_time}", "%Y/%m/%d %H:%M") departure_datetime = datetime.strptime(f"{dep_date} {dep_time}", "%Y/%m/%d %H:%M") # 判断:如果出发时间早于到达时间,说明是第二天,给出发日期加一天 if departure_datetime < arrival_datetime: # 用timedelta(days=1)实现加一天 corrected_departure = departure_datetime + timedelta(days=1) # 把修正后的datetime对象转成原来格式的字符串 corrected_dep_date = corrected_departure.strftime("%Y/%m/%d") corrected_dep_time = corrected_departure.strftime("%H:%M") else: # 不需要修正的话,直接用原来的字段 corrected_dep_date = dep_date corrected_dep_time = dep_time # 组装修正后的行,写入新文件 corrected_row = [arr_date, arr_time, corrected_dep_date, corrected_dep_time] csv_writer.writerow(corrected_row) # 处理完成后提示 print("数据修正完成!修正后的文件是corrected_data.csv")
给新手的入门学习方向
如果你完全是Python新手,可以按照这个顺序慢慢学:
- Python基础语法:先掌握变量、循环(for/while)、条件判断(if-else)这些最基本的内容,能看懂代码里的逻辑
- CSV文件操作:跟着官方文档或者简单教程,学会用
csv模块读写文件,理解什么是reader和writer - 日期时间处理:重点学
datetime模块的strptime(转成日期对象)、strftime(转成字符串)和timedelta(时间计算),这是处理时间类问题的核心 - 小步测试:处理大文件前,先用几行测试数据跑代码,确认没问题再处理3000行的文件,避免出错
- 注意细节:比如文件路径(如果CSV文件和代码不在同一个文件夹,要写完整路径)、数据分隔符(是空格还是逗号,要和实际文件一致)
内容的提问来源于stack exchange,提问作者GDPS
相关产品推荐
相关产品推荐

