在一个目录中的一堆csvfile中拆分和合并数据

2024-05-15 13:57:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我在一个目录中有很多.csv文件,这些文件来自一个能量测量设备,它每两秒钟存储一次文件。 每个文件看起来类似于:

Position,Date,Time,V12,Unit,V23,Unit,V31,Unit,A1,Unit,A2,Unit,A3,Unit,P(SUM),Unit,S(SUM),Unit,Q(SUM),Unit,PF(SUM),Unit,PFH,Unit,WH,Unit,SH,Unit,QH,Unit,FREQ,Unit
0,7/21/2016,23:59:56,392.5, ACV,394, ACV,393.2, ACV,1.053, ACA,1.045, ACA,0, ACA,0.367,KW  ,0.432,KVA ,0.229,KVAR,0.84,,0.85,,854.6,KWH   ,1,MVAH  ,516.8,KVARH ,50,Hz  
0,7/21/2016,23:59:58,392.6, ACV,394.1, ACV,392.9, ACV,1.053, ACA,1.048, ACA,0, ACA,0.368,KW  ,0.433,KVA ,0.229,KVAR,0.84,,0.85,,854.6,KWH   ,1,MVAH  ,516.8,KVARH ,50,Hz  
0,7/22/2016,0:00:00,392.5, ACV,394, ACV,392.5, ACV,1.049, ACA,1.042, ACA,0, ACA,0.366,KW  ,0.431,KVA ,0.228,KVAR,0.84,,0.85,,854.6,KWH   ,1,MVAH  ,516.8,KVARH ,49.9,Hz  
0,7/22/2016,0:00:02,392.1, ACV,393.5, ACV,392.1, ACV,1.047, ACA,1.039, ACA,0, ACA,0.363,KW  ,0.428,KVA ,0.226,KVAR,0.84,,0.85,,854.6,KWH   ,1,MVAH  ,516.8,KVARH ,50,Hz  

有时文件中只有一天,有时两天或更多天(如果测量停止)。有时数据之间会有一个标题(当测量停止并重新开始时)。 每个文件由30000行组成,数据按升序排序。在

我想为每一天制作一个通过日期命名的文件。在本例中,它将是2016-07-21.csv(可以在第二列中找到日期)。文件应该以您在上面找到的标题行开始。在

可在此处找到示例文件: Sample files

有没有完成任务的脚本?在


Tags: 文件csv数据标题unitkwhsumhz
1条回答
网友
1楼 · 发布于 2024-05-15 13:57:14

以下方法可以帮助您开始:

from datetime import datetime
from collections import defaultdict
import csv
import glob

days = defaultdict(list)

for filename in glob.glob('*.csv'):
    with open(filename, 'rb') as f_input:
        csv_input = csv.reader(f_input)
        header = next(csv_input)

        for row in csv_input:
            if row[0] != "Position":
                day = datetime.strptime('{} {}'.format(row[1], row[2]), '%m/%d/%Y %H:%M:%S')
                days[row[1]].append([day, row])

for day in sorted(days.keys()):
    with open('/myoutputfolder/{}.csv'.format(days[day][0][0].strftime('%Y-%m-%d')), 'wb') as f_output:
        csv_output = csv.writer(f_output)
        csv_output.writerow(header)
        csv_output.writerows(row for dt, row in sorted(days[day], key=lambda x: x[0]))

这将读取所有的csv文件,对条目进行排序,并每天将其写入一个单独的csv文件中。它使用Pythondefaultdict来保存每天的条目列表。它还将日期和时间列转换为Python datetime,以便在写入输出文件之前,所有条目都能正确排序。glob库用于返回给定文件夹的.csv文件的列表。如果需要子文件夹,则需要将其转换为使用os.walk()csv库用于自动将csv文件读入列表中。在

使用Python2.7.12进行测试

相关问题 更多 >