使用Python

时间:2018-05-30 01:50:43

标签: python linux csv

我有一个包含大量日期和时间(大约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,但我不知道如何。

关于我应该从哪里开始的任何建议?

1 个答案:

答案 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