项目:从电子表格中读取数据

332 阅读1分钟

假定你有一张电子表格的数据,来自于 2010 年美国人口普查。你有一个无聊的任 务,要遍历表中的几千行,计算总的人口,以及每个县的普查区的数目(普查区就是一 个地理区域,是为人口普查而定义的)。每行表示一个人口普查区。 在这个项目中,你要编写一个脚本,从人口普查电子表格文件中读取数据,并 在几秒钟内计算出每个县的统计值。 下面是程序要做的事:

从 Excel 电子表格中读取数据。

  • 计算每个县中普查区的数目。
  • 计算每个县的总人口。
  • 打印结果。

这意味着代码需要完成下列任务:

  • 用 openpyxl 模块打开 Excel 文档并读取单元格。
  • 计算所有普查区和人口数据,将它保存到一个数据结构中。
  • 利用 pprint 模块,将该数据结构写入一个扩展名为.py的文本文件。
#! python3
# readCensusExcel.py - 列出每个县的人口和人口普查区的数目。
import openpyxl, pprint,os
os.chdir('D://练习')
print('Opening workbook...')
wb = openpyxl.load_workbook('D://练习//censuspopdata.xlsx')
#openpyxl.load_workbook函数接受文件名,返回一个workbook数据类型的值.
#这个workbook对象代表这个Excel文件
sheet = wb['Population by Census Tract']
#打开这个表
countyData = {}
print('Reading rows...')
for row in range(2,sheet.max_row + 1):
    #sheet.max_row 最大行数
    state = sheet['B' + str(row)].value
    county = sheet['C' + str(row)].value
    pop = sheet['D' + str(row)].value
    countyData.setdefault(state,{})
    #setdefault如果键不存在于字典中,将会添加键并将值设为默认值
    countyData[state].setdefault(county,{'tracts':0,'pop':0})
    countyData[state][county]['tracts'] += 1
    countyData[state][county]['pop'] += int(pop)
print('Writing results...')
resultFile = open('census2010.py', 'w')
resultFile.write('allData = ' + pprint.pformat(countyData))
resultFile.close()
print('Done.')