2017-04-07 36 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)