Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中向datetime对象添加填充零?_Python_Csv_Datetime_Indexing - Fatal编程技术网

如何在Python中向datetime对象添加填充零?

如何在Python中向datetime对象添加填充零?,python,csv,datetime,indexing,Python,Csv,Datetime,Indexing,我有一个如下所示的文件: London XXX Europe 2020 9 7 0 0 0 2 2020 9 7 0 11 35 2 57 Tanger XXX Africa 2020 9 7 0 29 54 2 2020 9 7 23 57 16 2 29 Doha XXX Asia 2020 9 7 0 57 23 2 2020 9

我有一个如下所示的文件:

London  XXX Europe  2020    9   7   0   0   0   2   2020    9   7   0   11  35  2   57
Tanger  XXX Africa  2020    9   7   0   29  54  2   2020    9   7   23  57  16  2   29
Doha    XXX Asia    2020    9   7   0   57  23  2   2020    9   7   23  58  48  2   11
我正在尝试将索引
3,4,5,6,7,8
组合成一个带有
年、月、日、小时、分钟、秒的DateTime对象。
我尝试对
结束时间做同样的操作。然而,我的文件中的零似乎产生了一些奇怪的输出

这是我的代码:

path = r'c:\data\EK\Desktop\Python Microsoft Visual Studio\Extra\test_datetime.txt'

with open(path, 'r') as input_file:
    reader = csv.reader(input_file, delimiter='\t')
    for row in reader:
        start_time = (row[3] + row[4] + row[5] + row[6] + row[7] + row[8])  
        end_time = (row[10] + row[11] + row[12] + row[13] + row[14] + row[15])

        start_time = datetime.datetime.strptime(start_time, "%Y%m%d%H%M%S")
        end_time = datetime.datetime.strptime(end_time, "%Y%m%d%H%M%S")

        print(start_time)
        print(end_time)
2020-09-07 00:00:00
2020-09-07 01:13:05
2020-09-07 02:09:54
2020-09-07 23:57:16
2020-09-07 05:07:23
2020-09-07 23:58:48
2020-09-07 00:00:00
2020-09-07 00:11:35
2020-09-07 00:29:54
2020-09-07 23:57:16
2020-09-07 00:57:23
2020-09-07 23:58:48
这是我当前的输出:

path = r'c:\data\EK\Desktop\Python Microsoft Visual Studio\Extra\test_datetime.txt'

with open(path, 'r') as input_file:
    reader = csv.reader(input_file, delimiter='\t')
    for row in reader:
        start_time = (row[3] + row[4] + row[5] + row[6] + row[7] + row[8])  
        end_time = (row[10] + row[11] + row[12] + row[13] + row[14] + row[15])

        start_time = datetime.datetime.strptime(start_time, "%Y%m%d%H%M%S")
        end_time = datetime.datetime.strptime(end_time, "%Y%m%d%H%M%S")

        print(start_time)
        print(end_time)
2020-09-07 00:00:00
2020-09-07 01:13:05
2020-09-07 02:09:54
2020-09-07 23:57:16
2020-09-07 05:07:23
2020-09-07 23:58:48
2020-09-07 00:00:00
2020-09-07 00:11:35
2020-09-07 00:29:54
2020-09-07 23:57:16
2020-09-07 00:57:23
2020-09-07 23:58:48
这是我的预期输出:

path = r'c:\data\EK\Desktop\Python Microsoft Visual Studio\Extra\test_datetime.txt'

with open(path, 'r') as input_file:
    reader = csv.reader(input_file, delimiter='\t')
    for row in reader:
        start_time = (row[3] + row[4] + row[5] + row[6] + row[7] + row[8])  
        end_time = (row[10] + row[11] + row[12] + row[13] + row[14] + row[15])

        start_time = datetime.datetime.strptime(start_time, "%Y%m%d%H%M%S")
        end_time = datetime.datetime.strptime(end_time, "%Y%m%d%H%M%S")

        print(start_time)
        print(end_time)
2020-09-07 00:00:00
2020-09-07 01:13:05
2020-09-07 02:09:54
2020-09-07 23:57:16
2020-09-07 05:07:23
2020-09-07 23:58:48
2020-09-07 00:00:00
2020-09-07 00:11:35
2020-09-07 00:29:54
2020-09-07 23:57:16
2020-09-07 00:57:23
2020-09-07 23:58:48

问题是,当您连接像
行[3]+行[4]+行[5]+行[6]+行[7]+行[8]
这样的字段时,所有的单位数字段都没有前导零,因此无法使用
strtime()正确解析它们

可以使用字符串格式化函数添加前导零,但首先没有理由使用
strtime()
。只需调用
datetime.datetime()
即可直接从值创建对象

start_time = datetime.datetime(*map(int, row[3:9]))
end_time = datetime.datetime(*map(int, row[10:16]))

使用pandas是一个选项吗?为什么要使用
strtime()
而不是直接从文件中的值创建
datetime
对象?@EzerK否,最好不要。我想让它与我当前的代码一起工作。@Barmar我还没有真正考虑过它…+1用于使用
pandas
-如果你想深入挖掘,也可以跳过使用
csv
,编写你自己的解析器。但是为什么不享受一些便利呢?e、 看一看。谢谢。这看起来不错。你能解释一下
*
map
函数刚才做了什么吗?
map()
对列表的所有元素调用函数并返回所有结果。因此,这会将该列表中的所有字符串转换为整数。而且,
*
将一个列表扩展到函数的单独参数中。那么我可以假设这总是100%有效吗?我不想把我的生命押在它上,但我不明白为什么它不起作用。只要CSV中的列与
datetime.datetime()的参数的顺序相同,它就应该起作用。