我一直在努力解決如何解析一組文本文件到數據庫。該文件是這樣的:使用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票,所以我想我會澄清。我不是要求某人爲我寫代碼。我不需要知道如何打開或連接到數據庫,我可以解決這個問題。我不需要知道如何將值列入列表。我想我需要找出如何將文本文件中的一行分割成多列(然後我將替換「打印行」語句)。
我知道這是違反規則徵求意見,但如果你認爲我已經完成了這一切,那麼,你知道,隨時告訴我。
感謝
你可以發佈你要尋找什麼,最終的結果是怎樣的?目前還不清楚你想如何格式化。此外,值得包括你試圖讓它工作(所以,你正在得到的輸出,以及它如何與你想要的不同) – TemporalWolf