我一直在努力研究如何将一组文本文件解析为数据库。文件如下所示:
[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'语句)。
我知道要求提出意见是违反规则的,但如果你认为我已经完成了这一切,那么,你知道,随时告诉我。
由于
答案 0 :(得分:0)
也许这就是您需要的一行数据:
>>> line = '''01 Apr 1975, 120.209, 2.150'''
>>> [_.strip() for _ in line.split(',')]
['01 Apr 1975', '120.209', '2.150']