我有一个包含大量日期和时间(大约3000行)的.csv文件。所有的行都像:
#Arrival_Date# #Arrival_Time# #Departure_Date# #Departure_Time#
2017/01/01 23:30 2017/01/01 00:30
2017/02/01 23:30 2017/02/01 23:40
2017/03/01 15:45 2017/03/01 17:30
2017/04/10 23:50 2017/04/10 00:30
但我的问题是:我需要在Departure_Date(2017/01/02和2017/04/11)更正日期。
有没有办法自动执行此操作?我的教授告诉我使用Python,但我不知道如何。
关于我应该从哪里开始的任何建议?
答案 0 :(得分:0)
如果出发地点在抵达前,您正试图在出发日期添加一天。为此,您需要使用Python的datetime
库。首先将日期和时间组件组合成一个字符串,然后将字符串转换为datetime对象。然后,您可以进行简单的比较,以确定一个日期是否在另一个日期之前。如果是这种情况,请在出发日期的某一天使用timedelta
。接下来将其转换回日期字符串并更新第三列(即row[2]
)。然后可以将更新的数据写回单独的CSV文件:
from datetime import datetime, timedelta
import csv
one_day = timedelta(days=1)
with open('times.csv', newline='') as f_input, open('times_updated.csv', 'w', newline='') as f_output:
csv_input = csv.reader(f_input)
csv_output = csv.writer(f_output)
header = next(csv_input)
csv_output.writerow(header)
for row in csv_input:
arrival_time = datetime.strptime('{} {}'.format(row[0], row[1]), '%Y/%m/%d %H:%M')
departure_time = datetime.strptime('{} {}'.format(row[2], row[3]), '%Y/%m/%d %H:%M')
if departure_time < arrival_time:
departure_time += one_day
row[2] = departure_time.strftime('%Y/%m/%d')
csv_output.writerow(row)
这将为您提供包含以下内容的输出CSV文件:
#Arrival_Date#,#Arrival_Time#,#Departure_Date#,#Departure_Time#
2017/01/01,23:30,2017/01/02,00:30
2017/02/01,23:30,2017/02/01,23:40
2017/03/01,15:45,2017/03/01,17:30
2017/04/10,23:50,2017/04/11,00:30
注意,这假设您使用的是Python 3.x,并且您的CSV文件被格式化为普通的CSV文件,即aaa,bbb,ccc,ddd