2017-05-30 47 views
0

數據看起來像這樣如何將「發票」級數據解析爲柱狀數據進行分析?

發票1

ID 
Lat 
Long 
Year 
Month 
Observations 
1 
. 
. 
. 
n 

#-----

發票2-正(圖案重複)

我的目標是結束以表形式提供

ID | Lat | Long | Year | Month | Obs 1 | Obs 2 | Obs 3 | Obs n 

#-----充當發票之間的分隔符

很容易從廣角去長在這一點上,但什麼是寫的映射規則,並通過數據迭代的最佳方法?我的所有數據都在一個.csv文件中,但超過100萬行。

我正在尋找一個開始的地方,以及處理這種格式的數據的一般過程。

+0

是否知道並修復了'n'? – DyZ

+0

@DYZ'n'是已知的,但基於發票可變。 I.E.發票1可能有38個obs(n = 38),而發票4可能有90個。 – Mako212

+0

您如何知道下一張發票何時開始? – DyZ

回答

0
with open('path/to/input') as infile, open('path/to/output', 'w') as fout: 
    outfile = csv.writer(fout) 
    invoice = [] 
    for line in infile: 
     if line.startswith("Invoice"): 
      outfile.writerow(invoice) 
      invoice = [] 
      continue 
     line = line.strip() 
     if not line: continue 
     invoice.append(line) 
    outfile.writerow(invoice) 
0

一個簡單的循環應該工作:

with open('...') as infile: 
    data = [] 
    line = [] 
    item = infile.readline().strip() 
    while item != '': 
    if item.startswith('#-----'): 
     data.append(line) 
     line = [] 
    else: 
     line.append(item) 
    item = infile.readline().strip() 

最後,data是一個列表的列表(不一定是矩形)。