在每列csv中添加文本

0 投票
2 回答
654 浏览
提问于 2025-04-18 02:47

我需要一个Python脚本,来在每个CSV文件的每一列中添加文本。我的文件夹里有330个CSV文件,格式是这样的:

14-04-03T08:52:38;...
14-04-03T08:52:39;...
14-04-03T08:52:40;...
...

我需要的格式是这样的(把14改成2014):

2014-04-03T08:52:38;...
2014-04-03T08:52:39;...
2014-04-03T08:52:40;...
...

我该怎么实现这个呢?

下面是我代码的一个例子,里面有打印输出:

import os
import sys 
import csv
dirList = os.listdir(sys.argv[1])
dirList.sort()
for sFile in dirList:
    changeFile = sys.argv[1] + sFile
    print changeFile          
    with open(changeFile, 'rb') as f:
        reader = csv.reader(f, delimiter=';')
        for row in reader:
            print row[0]

输出结果是这样的:

14-04-03T12:03:34
14-04-03T12:03:35
14-04-03T12:03:36

我该怎么在每一列的开头加上“20”呢?

2 个回答

0

当你读取CSV文件中的每个元素时,遇到日期字符串时就进行解析和转换。

你可以这样做:

import time
import datetime

datetime.datetime(
    *(time.strptime("14-04-03T08:52:38","%y-%m-%dT%H:%M:%S")[:6])
).strftime('%Y-%m-%dT%H:%M:%S')

那么这到底是做什么的呢?

它会把你的一串日期字符串,比如 "14-04-03T08:52:38",转换成一个真实的时间对象。 我们把这个时间对象转变成一个日期时间对象,并以不同的格式输出你的年份,所以变成了:'2014-04-03T08:52:38'

现在你只需要把这些值替换到你的CSV文件里,就可以继续啦 :-)

import os
import sys 
import csv
import datetime
import time

dirList = os.listdir(sys.argv[1])
dirList.sort()
for sFile in dirList:
    changeFile = sys.argv[1] + sFile
    print changeFile          
    with open(changeFile, 'rb') as f:
        reader = csv.reader(f, delimiter=';')
        for row in reader:
            print datetime.datetime(
                      *(time.strptime(row[0],"%y-%m-%dT%H:%M:%S")[:6])
                  ).strftime('%Y-%m-%dT%H:%M:%S')
0

一种方法是把文件当作文本文件打开,逐行读取内容,然后在每一行前面加上'20',再把这些内容写入一个新的输出文件。接着,删除原来的文件,并把新文件改名为原来的文件名。

撰写回答