合并文件基于部分匹配的文件名

时间:2016-10-07 01:15:35

标签: python shell

我正在测量因变量与自变量(让我们说来自设备测量的电流与电压),测量设置将为我提供一个单独的文件,用于正测量和负测量值。每个文件都是一个excel文件,有2列,每列一个用于电压和电流。我可以将它们命名为我想要的任何名称,因此我将它们命名为device1_pos,device1_neg,device2_pos,device2_neg,device3_pos,device3_neg等等。另外,我可以对给定设备进行重复测量,因此我将其命名为device1_pos_meas2,device1_neg_meas2。收集完所有数据后,我想将正负测量值合并到一个给定设备的单个文件中。所以我想拥有像device1这样的文件(将device1_pos和device1_neg结合起来,但是我会将同一设备的第二次测量结果放在一个单独的文件中,比如device1_meas2),依此类推每个设备数据。

有没有办法可以在python或shell脚本中自动执行此过程?如果有一种更聪明的方法,我可以命名我的文件以使过程更容易,这也是一个有用的建议。

在我的初始问题中添加更多信息 - 我想我可以合并2个文件,如下所示。我正在连接2​​个文件,但由于我不想要标题和行索引,我将它逐行读入csv文件(不是最有效的方法,但我可以想出来的。)

import os
import pandas as pd
from xlrd import open_workbook
import xlwt

os.chdir(' C:\用户\ fg7xmx \文件\项目\ ESD \测试平台\测量\ 100616&#39)

path=os.getcwd()
file_pos=raw_input("Enter pos data file:")
file_neg=raw_input("Enter neg data file:")
file_allData=raw_input("Enter all data file name:")
file_csv=raw_input("Enter csv file name:")
file1=pd.read_excel(file_pos)
file2=pd.read_excel(file_neg)
file3=pd.concat([file1,file2],axis=0)
file3.to_excel(file_allData)
wb=open_workbook(file_allData)
for sheet in wb.sheets():
    workbook=xlwt.Workbook()
    newSheet = workbook.add_sheet('TLP_IV')
    for row in range(sheet.nrows):
        if row==0: continue
        for col in range(sheet.ncols):
            if col==0: continue
            newSheet.write(row-1,col-1,sheet.cell_value(row,col))
workbook.save(file_csv)

但是,如您所见,我手动输入每个文件名,这对于大量文件来说是不合理的。我的实际文件名看起来像

Mod5_pin10_pin8_pos_dev1_10-06-16_10' 01' 21_AM.xls

我知道使用正则表达式我可以匹配给定的模式但是在这里我需要将具有相同模块编号,相同编号,相同测量域(pos或neg),相同开发编号,相同日期戳和忽略时间戳。我不确定我可以使用什么命令进行此类分组。

1 个答案:

答案 0 :(得分:0)

以下是我如何做到这一点

groups= defaultdict(list)
group_sweep=defaultdict(list)
for filename in os.listdir('C:\\Users\\TLP_IV'):
    basename, extension = os.path.splitext(filename)
    mod, name, pin1, pin2, sweep, dev, meas, date, time, hour=basename.split('_')
    groups[mod, name, pin1, pin2, dev, meas, date].append(filename)
    group_sweep[sweep].append(filename)

我确保用相同的命名约定命名每个文件' _'作为分隔符。一旦我可以创建一个包含各种属性列表的字典,我就可以按键分组并读取给定键的值,如下所示

for keys,values in group_sweep.items():
    i=""
    for key in keys:
        if key=='n':
            for value in values:
                print value