2017-04-07 33 views
0

我想用python 3.6读取多个CSV文件,跳过标题并停在第一个空行。然后我想只提取每个csv文件的第四列填充到数组中,但排序如最后所示。读取多个CSV文件,在空行切割,排序的列数

我的文件:CSV Files

这就是到目前为止我的代码,但我不是很满意的输出顺序,也许还有一个更优雅的方式?

csvdata_d=[] 

for i in range(timestep): # timestep = number of files 
    with open(csvname[i]) as f: 
     reader = csv.reader(f) 
     readerlist=list(reader) 
     for row in readerlist[2:]: # skip two header lines 
      if len(row) == 0:  # empty line definition 
       break    
      else: 
       row=list(row) 
       csvdata_d.append(row[3]) # fourth column 

print(csvdata_d) 

我的输出是:csvdata_d = [ '1.1', '1.2', '1.3', '2.1', '2.2', '2.3', '3.1', '3.2', '3.3']但我希望它是[['1.1','2.1','3.1'],['1.2','2.2','3.2'],['1.3','2.3','3.3' ']]

感谢您的帮助。

+0

是否所有的CSV文件的空白行之前相同的行数?否则,你想要的格式将是ambigous。 – acidtobi

+0

是的,他们有相同的行数 – PadNu

+0

你在正确的轨道上。如果你想要一个列表清单,然后做一个。 –

回答

0

我解决了它与numpys genfromtxt模块和一个循环来找到空行

headsize=2 #lines toskip at beginning 
csvdata=[] 
measuredata=[] 

with open (csvname[0])as f: #Measurement of file to first empty row 
    reader = csv.reader(f) 
    readerlist=list(reader) 
    lengthfile=(len(readerlist)) 
    for row in readerlist[headsize:]: 
     if len(row)== 0: 
      break 
     else: 
      measuredata.append(list(row[3])) 

skfooter=int(lengthfile-(len(measuredata)+(Headsize+1))) #calc number of rows below empty line 

for i in range(timestep): 
    data=np.genfromtxt((csvname[i]), delimiter=',', skip_header=headsize, usecols=3, skip_footer=skfooter) 
    csvdata.append(data) 


s=[] 
for i in range (len(csvdata[0])): 
    s.append([item[i] for item in csvdata])  
print(s)