需要在Python中的几个CSV文件中的每一行上进行数学运算

mrm*_*man 2 python csv datestamp

我有大约100个CSV文件,我必须每月操作一次,我试图绕过这个,但我遇到了一堵墙.我开始理解有关Python的一些事情,但是结合几件事情仍然给我带来了问题,所以我无法理解这一点.

这是我的问题:

我有很多CSV文件,这就是我需要做的:

在每行的前面添加一个"列"(或者后面,真的没关系,但前面是理想的).另外,每行有5行(不包括将要添加的文件名),这里是格式:

6位身份证号码,YYYY-MM-DD(1),YYYY-MM-DD(2),YYYY-MM-DD(3),1-2位数字

对于给定目录中的每个CSV,我需要从YYYY-MM-DD(2)中为文件中的每一行(没有标题行)减去YYYY-MM-DD(3).

我需要行内的文件名,因为我将组合文件(如果包含在脚本中,那将是很棒的,但我想我可以把这部分看出来),我需要知道记录来自哪个文件.文件名格式始终为'4-5-digit-number.csv'

我希望这是有道理的,如果没有,请告诉我.我有点难过甚至开始,所以我没有任何样本代码,甚至真的开始为我工作.真的很沮丧,所以我感谢你们提供的任何帮助,这个网站摇滚!

Mylan公司

Tim*_*ker 7

标准库中有一个工具用于执行以下每项任务:

要迭代目录中的所有CSV文件,请使用以下glob模块:

import glob
for csvfilename in glob.glob(r"C:\mydirectory\*.csv"):
    #do_something
Run Code Online (Sandbox Code Playgroud)

要解析CSV文件,请使用以下csv模块:

import csv
with open(csvfilename, "rb") as csvfile:
    reader = csv.reader(csvfile, delimiter=",")
    for row in reader:
        # row is a list of all the entries in the current row
Run Code Online (Sandbox Code Playgroud)

要解析日期并计算差异,请使用以下datetime模块:

from datetime import datetime
startdate = datetime.strptime("1999-10-20", "%Y-%m-%d")
enddate = datetime.strptime("2003-02-28", "%Y-%m-%d")
delta = enddate - startdate # difference in days
Run Code Online (Sandbox Code Playgroud)

要将值添加到行的开头:

row[0:0] = [str(delta)]
Run Code Online (Sandbox Code Playgroud)

要将文件名附加到行的末尾:

row.append(csvfilename)
Run Code Online (Sandbox Code Playgroud)

并在新CSV文件中写入一行:

with open(csvfilename, "wb") as csvfile:
    writer = csv.writer(csvfile, delimiter=",")
    writer.writerow(row)
Run Code Online (Sandbox Code Playgroud)

总而言之,你得到:

import glob
import csv
from datetime import datetime

with open("combined_files_csv", "wb") as outfile:
    writer = csv.writer(outfile, delimiter=",")
    for csvfilename in glob.glob(r"C:\mydirectory\*.csv"):
        with open(csvfilename, "rb") as infile:
            reader = csv.reader(infile, delimiter=",")
            for row in reader:
                startdate = datetime.strptime(row[3], "%Y-%m-%d")
                enddate = datetime.strptime(row[2], "%Y-%m-%d")
                delta = enddate - startdate # difference in days
                row[0:0] = [str(delta)]
                row.append(csvfilename)
                writer.writerow(row)
Run Code Online (Sandbox Code Playgroud)

  • 太棒了,谢谢你的这些提示,我非常欣赏这个方向 (2认同)