如何在不打开csv文件的情况下添加新列

时间:2018-08-15 04:53:12

标签: python excel-vba csv

我报废了数据并导出为csv文件。 为简单起见,数据如下所示 (我故意放任意变量以说明一个例子):

id var1 var2 var3 ...
A  10   14    355 ...
B  35   56    22  ...
C  95   22    222 ...
D  44   55    222 ... 

由于我每天收集数据,因此我将文件名保存为city_20180814_result.csv 例如,如果我于2018年8月14日在纽约市收集了数据,则对应的文件名为NYC_20180814_result.csv

在这里,我想在每个csv文件中添加一个新列,即date变量。 所需的示例将类似于以下示例。具体来说,我想在每个csv文件中添加一个日期(格式为YYYYMMDD)列,并且这些值将成为收集数据的日期。例如,以下示例csv文件是在2018年8月14日生成的,则更新后的数据将如下所示:

id   date     var1 var2  var3 ...
A    20180814 10   14    355 ...
B    20180814 35   56    22  ...
C    20180814 95   22    222 ...
D    20180814 44   55    222 ... 

执行此操作的常规方法是打开每个csv文件并手动添加新列,为所有行分配一个对应的日期,然后对所有csv文件重复此步骤。但是有太多的事情要做。有什么办法可以有效地做到这一点?由于我保存了包括日期在内的文件名,因此,如果可能的话,最好使用此名称。任何帮助/代码(再次使用python或excel宏)都将不胜感激。

1 个答案:

答案 0 :(得分:1)

我使用python的pandas软件包的解决方案:

import os
import re
import pandas as pd

FILE_PATTERN = re.compile(r'(.*)_(\d{8})_result.csv')

def addDate(file_dir):
    csv_list = [csvfile for csvfile in os.listdir(file_dir) if re.fullmatch(FILE_PATTERN, csvfile)]
    for csvname in csv_list:
        date = re.fullmatch(FILE_PATTERN, csvname).group(2)
        df = pd.read_csv(os.path.join(file_dir, csvname))
        df.insert(loc=1, column='date', value=[date]*len(df))
        df.to_csv(os.path.join(file_dir, csvname), index=False)

示例输入:NYC_20180814_result.csv中的some_path

   A  B  C
0  0  1  2
1  3  4  5
2  6  7  8

执行addDate(some_path)后,具有相同的csv:

   A      date  B  C
0  0  20180814  1  2
1  3  20180814  4  5
2  6  20180814  7  8

P.S。您不会在csv文件中看到索引列。