使用Python csv模块覆盖csv文件中的特定列

发布于 2021-01-29 15:03:56

我正在使用Python csv模块读取csv文件,每一行都像这样:

2013-04-16 7:11:01,186744,3,2,2,1.89E-03

然后,我将row [0]转换为Unix时间,但是我想用刚为csv文件的每一行找到的Unix时间替换datetime

import pymongo
import datetime
import re
import csv
import calendar

X = []
OBD = []
Y = []

csv_in = open('FakeAPData.csv', 'rb')


for row in reader:
    date = datetime.datetime.strptime(row[0], '%Y-%m-%d %H:%M:%S')
    datet = unicode(datetime.datetime.strptime(row[0], '%Y-%m-%d %H:%M:%S'))
    datett = tuple(int(v) for v in re.findall("[0-9]+", datet))
    y = calendar.timegm(datett)
    Y.append(y)

因此,我使用unixtime值创建了列表Y,但是接下来我该如何进行替换,以产生如下所示的输出:

1366097085,186744,3,2,2,1.89E-03
关注者
0
被浏览
95
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    每个row只是一个list。您可以就地对其进行修改,也可以使用要替换的值创建一个新列表:

    row[0] = y # or row = [y] + row[1:], or ...
    

    如果要将其写回文件,则需要使用csv.writer。例如:

    os.rename('FakeAPData.csv', 'FakeAPData.csv.bak')
    
    csv_in = open('FakeAPData.csv.bak', 'rb')
    csv_out = open('FakeAPData.csv', 'wb')
    
    writer = csv.writer(csv_out)
    
    for row in csv.reader(csv_in):
        date = datetime.datetime.strptime(row[0], '%Y-%m-%d %H:%M:%S')
        datet = unicode(datetime.datetime.strptime(row[0], '%Y-%m-%d %H:%M:%S'))
        datett = tuple(int(v) for v in re.findall("[0-9]+", datet))
        y = calendar.timegm(datett)
        row[0] = y
        writer.writerow(row)
    

    当然,您还需要保存close文件,并清理所有重复和未使用的代码。在此过程中,我会将日期转换代码分解为一个函数。并使用使操作变得容易的功能,而不是使操作变得困难和脆弱的功能。

    所以:

    def transform_date(date):
        return calendar.gmtime(datetime.strptime(date, '%Y-%m-%d %H:%M:%S').timetuple())
    
    def transform_row(row):
        return [transform_date(row[0])] + row[1:]
    
    name = 'FakeAPData.csv'
    bakname = name + '.bak'
    os.rename(name, bakname)
    with open(bakname, 'rb') as in csv_in, open(name, 'wb') as csv_out:
        writer = csv.writer(csv_out)
        writer.writerows(transform_row(row) for row in csv.reader(csv_in))
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看