2016-12-13 42 views
-1

我一直在努力解決如何解析一組文本文件到數據庫。該文件是這樣的:使用python解析文本文件到數據庫

[STATION NUMBER] 
2001 
[END] 
[AM Details] 
Year Type,Water Year,Oct 
[End] 
[AM Rejected] 
1974,1974 
[END] 
[AM Values] 
01 Apr 1975, 120.209, 2.150 
06 Jan 1976, 158.699, 2.470 
21 Jan 1977, 128.289, 2.220 
23 Feb 1978, 198.254, 2.770 
[END] 

我想要得到的第二行「2001」爲「[AM值]」下的鍵每一行。我已經研究過如何將這些值與'標籤'分開(即[STATION NUMBER],[AM Details]等),而不是如何將數據分隔成列。下面是到目前爲止,我已經得到了代碼:

import os 
import os.path 
import csv 
import re 
from zipfile import ZipFile 
from itertools import islice 

#Extracts and loads the files in a zip file to a specified destination 
ze = ZipFile(open("/Users/jem/WINFAP-FEH_v3.3.4.zip","r")) 
ze.extractall("/Users/jem/WINFAP-FEH_v4.1/") 
print "Extraction successful" 


#Meta data of the zipfile 
zf = ZipFile('/Users/jem/WINFAP-FEH_v3.3.4.zip', 'r') 
zc = zf.namelist() 
#print zc 

data = [] 
#Loop to run each csv file and print the data 
if __name__ == "__main__": 
    i = 0 
    while i < len(zc): 
      for csv_path in zc: 
       if os.path.splitext(zc[i])[1] == ".AM":#make sure it's an annual maximum file 
        os.chdir('/Users/jem/WINFAP-FEH_v4.1/') 

        with open(zc[i], 'r') as input_data: 
         for line in input_data: 
          if line.strip() == "[AM Values]": 
           break 

         for line in input_data: 
          if line.strip() == "[END]": 
          break 
          print line 

        #for row in csv_f: 
         #print row 
        input_data.close() 
        i += 1 
       else: 
        i+=1 
print(data) 

的文件是一個zip這是公開可用的下載(這裏:http://nrfa.ceh.ac.uk/sites/default/files/WINFAP-FEH_v4.1.zip)和很少更新,這就是爲什麼我想從ZIP閱讀能力直接文件。

我注意到我沒有明顯的原因得到-1票,所以我想我會澄清。我不是要求某人爲我寫代碼。我不需要知道如何打開或連接到數據庫,我可以解決這個問題。我不需要知道如何將值列入列表。我想我需要找出如何將文本文件中的一行分割成多列(然後我將替換「打印行」語句)。

我知道這是違反規則徵求意見,但如果你認爲我已經完成了這一切,那麼,你知道,隨時告訴我。

感謝

+0

你可以發佈你要尋找什麼,最終的結果是怎樣的?目前還不清楚你想如何格式化。此外,值得包括你試圖讓它工作(所以,你正在得到的輸出,以及它如何與你想要的不同) – TemporalWolf

回答

0

也許這就是你需要的數據的一行:

>>> line = '''01 Apr 1975, 120.209, 2.150''' 
>>> [_.strip() for _ in line.split(',')] 
['01 Apr 1975', '120.209', '2.150'] 
+0

謝謝比爾,我會試試看。 –