使用python

时间:2016-12-13 21:17:52

标签: python database text

我一直在努力研究如何将一组文本文件解析为数据库。文件如下所示:

[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 Values]”下每行的键。我已经研究了如何将值与'标签'(即[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票,所以我想我会澄清一下。我不是要求别人为我编写代码。我不需要知道如何打开或连接到数据库,我可以解决这个问题。我不需要知道如何将值放入列表中。我想我需要找出如何将文本文件中的一行分成列(然后我将替换'print line'语句)。

我知道要求提出意见是违反规则的,但如果你认为我已经完成了这一切,那么,你知道,随时告诉我。

由于

1 个答案:

答案 0 :(得分:0)

也许这就是您需要的一行数据:

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