gpt4 book ai didi

python - 为什么 datetime 函数会更改我字典中的值

转载 作者:太空宇宙 更新时间:2023-11-04 04:03:40 28 4
gpt4 key购买 nike

我正在尝试使用 dictreader 将 csv 转换为字典,但 datetime 存在异常,它的存在改变了我的字典值。

with open(file_name, 'r') as file:
reader = csv.DictReader(file, fieldnames=(fields))
for item in reader:
duration = item['duration_in_seconds']
start = item['start_date'] + " " + item['start_time']
print(start)
x_as_datetime = datetime.datetime.strptime(start,"%Y%m%d %H:%M")
new_datetime = x_as_datetime + datetime.timedelta(seconds=duration) #add your timedelta

当我注释掉 print(start) 下面的所有内容时,打印的结果是:

OrderedDict([('channel_id', '69036687'), ('channel_name', 'RTE 1'), 
('channel_country', 'IRL'), ('start_date', '20180228'),
('start_time', '23:40'), ('duration_in_seconds', '1500'),
('program_id', '13071731'), ('program_original_title', 'Oireachtas
Report'), ('program_local_title', 'Oireachtas Report'),
('program_year', '')])

但是当我取消注释“print(start)”下面的所有内容时,结果完全变为:

OrderedDict([('channel_id', 'channel_id'), ('channel_name', 
'channel_name'), ('channel_country', 'channel_country'),
('start_date', 'start_date'), ('start_time', 'start_time'),
('duration_in_seconds', 'duration_in_seconds'), ('program_id',
'program_id'), ('program_original_title', 'program_original_title'),
('program_local_title', 'program_local_title'), ('program_year',
'program_year')])

所以所有的值都消失了。仅仅通过存在的日期时间,它怎么可能改变我的字典?

最佳答案

这很奇怪。但似乎在传递 fieldnames 关键字时标题行被添加到 DictReader 结果之前。

$ cat c.csv
channel_id,channel_name
69036687,RTE 1
$ python3
>>> from csv import DictReader
>>> with open('c.csv', 'r') as f:
... dr = DictReader(f)
... print([item for item in dr])
...
[OrderedDict([('channel_id', '69036687'), ('channel_name', 'RTE 1')])]
>>> with open('c.csv', 'r') as f:
... dr = DictReader(f, fieldnames=['channel_id', 'channel_name'])
... print([item for item in dr])
...
[OrderedDict([('channel_id', 'channel_id'), ('channel_name', 'channel_name')]), OrderedDict([('channel_id', '69036687'), ('channel_name', 'RTE 1')])]

编辑

来自文档:

If fieldnames is omitted, the values in the first row of file f will be used as the fieldname

另一方面,当使用 fieldnames=field_names_list 时,DictReader 需要一个没有标题行的文件,这意味着 field_names_list 顺序在这里很重要,因为它会得到映射到 csv 输入文件中的值。

$ cat c.csv
69036687,RTE 1
69036617,RTE 2
$ python3
>>> from csv import DictReader
>>> with open('c.csv', 'r') as f:
... dr = DictReader(f, fieldnames=['channel_id', 'channel_name'])
... print(*dr, sep=', ')
OrderedDict([('channel_id', '69036687'), ('channel_name', 'RTE 1')]), OrderedDict([('channel_id', '69036617'), ('channel_name', 'RTE 2')])

关于python - 为什么 datetime 函数会更改我字典中的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57762036/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com