Python for loop中途更改了原始数据的类型

时间:2018-12-24 23:40:46

标签: python

我正在使用一个包含unix时间戳的.csv文件,并且试图将每个unix时间戳转换为datetime实例。

import csv 
import datetime 

def count(month, data):
    month_count = 0
    for row in data[1:]: 
        # print(type(row[2]),row[2]) # This is for review
        float_num = float(row[2])
        row[2] = datetime.datetime.fromtimestamp(float_num)
        if row[2].month == month:
            month_count += 1
    return month_count

with open('askreddit_2015.csv') as file: 
    posts = list(csv.reader(file)) # posts is a list of lists

feb_count = count(2, posts)
aug_count = count(8, posts)

print(feb_count)
print(aug_count)

.csv文件的行[2]类似于

1433213314
1434205517
1443409636
1440188623
1440082910

运行原始代码时,我得到TypeError: float() argument must be a string or a number, not 'datetime.datetime',这很奇怪,因为row [2]中的所有数据最初都是字符串。为了检查问题出在哪里,我添加了该评论行,当我运行时,我得到了

<class 'str'> 1433213314
<class 'str'> 1434205517
<class 'str'> 1443409636
<class 'str'> 1440188623
<class 'str'> 1440082910
<class 'datetime.datetime'> 2015-06-01 19:48:34

使用TypeError: float() argument must be a string or a number, not 'datetime.datetime'为什么我的代码为什么尝试将已经转换的row [2]值再次放回float()?迭代应该在那个时候完成吗?谢谢。

1 个答案:

答案 0 :(得分:0)

您正在<Button android:layout_width="match_parent" android:layout_height="wrap_content" android:paddingRight="13dp" android:paddingLeft="16dp" android:paddingTop="16dp" android:paddingBottom="16dp" android:text="Homme" android:drawableLeft="@drawable/male_gender_light" android:gravity="center" android:textAllCaps="false" android:textColor="@color/hintColor" android:textSize="16sp" android:fontFamily="@font/gotham_rounded_regular" android:background="@drawable/gender_button_light"/> 函数中修改原始数组。

您可以在尝试转换日期之前简单地检查包含日期的元素是否为字符串。

+=