我必须将文本文件转换为由逗号分隔的字符串列表(没有空格,没有第一行)。打印完之后,我需要打印每个状态的名称,每个状态包含多少行,每个状态的所有Cen2010值(每行中的第一个数字)的总和,Est2013值的总和(每行中的最后一个数字) )对于每个州,以及每个州从Cen2010人口到Est2013人口的总变化。
文本文件示例:
NAME,STNAME,Cen2010,Base2010,Est2010,Est2011,Est2012,Est2013
" Abingdon city",Illinois,3319,3286,3286,3270,3242,3227
" Addieville village",Illinois,252,252,252,250,250,247
" Addison village",Illinois,36942,36964,37007,37181,37267,37385
" Adeline village",Illinois,85,85,85,84,84,83
当前代码:
def readPopest():
censusfile=pickAFile()
cf=open(censusfile,"rt")
cflines=cf.readlines()
for i in range(len(cflines)-1):
lines=cflines[i+1]
estimate=lines.strip().split(',')
print estimate
返回:
['" Abingdon city"',' Illinois','''' 3286',' 3286',' 3270',' 3242',' 3227']
['" Addieville village"',' Illinois'' 252',' 252',' 252',' 250',' 250',' 247']
['" Addison village"',' Illinois',' 36942',' 36964',' 37007',' 37181',' 37267',' 37385']
['" Adeline village"',' Illinois'' 85',' 85',' 85',' 84',' 84',' 83']
答案 0 :(得分:0)
我认为您可以将此数据导入SQL数据库,然后很容易求和,过滤等。
但是在Python中我们有字典。您可以读取数据并填写字典,其中键名是州名。然后,对于每一行,您将城镇添加到此州的城镇列表中,并将数字添加到已保存的数字中。当然,对于州内的第一个城镇,您必须创建具有两个阵列的结构。一个用于城镇,一个用于数字。在代码中它看起来像:
def add_items(main_dict, state, town, numbers):
try:
towns_arr, numbers_arr = main_dict[state]
towns_arr.append(town)
for i in range(len(numbers)):
numbers_arr[i] += numbers[i]
except KeyError:
town_arr = [town, ]
main_dict[state] = [town_arr, numbers]
现在您必须在读取文件的主代码中使用它:
state_dict = {}
cf = open(censusfile, "rt")
lines = cf.readlines()
for line in lines[1:]: # we skip 1st line
arr = line.strip().split(',')
town = arr[0]
state = arr[1]
numbers = [int(x) for x in arr[2:]]
add_items(state_dict, state, town, numbers)
print(state_dict)
作为家庭作业,尝试以所需的格式打印这本词典。