《Python编程快速上手》---项目记录(第12章)

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

import openpyxl, pprint
print('Opening workbook...')
wb = openpyxl.load_workbook('censuspopdata.xlsx')
sheet = wb.get_sheet_by_name('Population by Census Tract')
countyData = {}

# 填充县城数据,通过国家人口和土地
print('Reading rows...')
for row in range(2, sheet.max_row + 1):
	# Each row in the spreadsheet has data for one census tract.
	state = sheet['B' + str(row)].value
	county = sheet['C' + str(row)].value
	pop = sheet['D' + str(row)].value
	
	countyData.setdefault(state, {})
	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.')

唯一一点变化是:get_highest_row()和get_highest_column()在最新版的openpyxl模块中已经被删除了,取而代之的是max_row和max_column两个属性。

类似程序的思想

1,从电子表格中读取数据,将它作为 Python 程序的输入

example.xlxs还是书上的那个

#将从xlxs中读取的数据,存入列表name,然后输出
import openpyxl
wb = openpyxl.load_workbook('example.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
name=[]

for i in range(1, 8, 2):
	name.append(sheet.cell(row=i, column=2).value)

for nam in name:
	print(nam)

 

 2,检查电子表格是否有空行或无效的数据,如果有就警告。

#输出类型
import openpyxl
wb = openpyxl.load_workbook('example_one.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')

print(sheet.max_row)
name=[]
for i in range(1,sheet.max_row+1):
	name.append(sheet.cell(row=i, column=2).value)
i=1#记录第几行是空行
for nam in name:
	print(nam,end=' ')
	print(type(nam))
	

 

import openpyxl
wb = openpyxl.load_workbook('example_one.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')

print(sheet.max_row)
name=[]
for i in range(1,sheet.max_row+1):
	name.append(sheet.cell(row=i, column=2).value)
i=1#记录第几行是空行
for nam in name:
	if nam==None:
		print("row: "+str(i)+" 是 空行")
	i+=1

3,比较一个电子表格中多行的数据。
4,打开多个 Excel 文件,跨电子表格比较数据。

说一下思路:从Excel中提取数据,然后存入列表,元组,字典,然后比较即可。

12.6 项目:更新一个电子表格

假设 Garlic、Celery 和 Lemons 的价格输入的不正确,输入其正确的价格.

import openpyxl
wb = openpyxl.load_workbook('produceSales.xlsx')
sheet = wb.get_sheet_by_name('Sheet')

PRICE_UPDATES = {'Garlic': 3.07,
'Celery': 1.19,
'Lemon': 1.27}

for rowNum in range(2, sheet.max_row): # skip the first row
	produceName = sheet.cell(row=rowNum, column=1).value
	if produceName in PRICE_UPDATES:
		sheet.cell(row=rowNum, column=2).value = PRICE_UPDATES[produceName]
		
wb.save('updatedProduceSales.xlsx')

类似程序的思想

1,从一个电子表格读取数据,写入其他电子表格的某些部分

问题:如何将Excel中的一行整个转移到另一个Excel?

答:创建一个新的Excel表格,

import openpyxl
wb = openpyxl.Workbook()
sheet = wb.get_active_sheet()

wb.save('writeFormula_one.xlsx')

再通过Python操作

#提取produceSale.xlsx中'Cucumber','Grapefruit','Yellow peppers'的信息
#保存至example.xlsx中

import openpyxl
wb = openpyxl.load_workbook('produceSales.xlsx')
wbone = openpyxl.load_workbook('example.xlsx')

sheet = wb.get_sheet_by_name('Sheet')
#原来get_sheet_by_name()中的参数 表示取第几个sheet,务必与Excel下的sheet名称对应
sheetone = wbone.get_sheet_by_name('Sheet1')

flagA=False
flagB=False
flagC=False
flagD=False

speics=['Cucumber','Grapefruit','Yellow peppers']
speics_plus={'Cucumber':[],'Grapefruit':[],'Yellow peppers':[]}
for rowNum in range(2, sheet.max_row): 
	produceName = sheet.cell(row=rowNum, column=1).value
	column2=sheet.cell(row=rowNum, column=2).value
	column3=sheet.cell(row=rowNum, column=3).value
	if produceName in speics:
		speics_plus[produceName].append(column2)
		speics_plus[produceName].append(column3)
		if produceName =='Cucumber':
			flagA=True
		elif produceName =='Grapefruit':
			flagB=True
		elif produceName =='Yellow peppers':
			flagC=True
	if flagA == True and flagB == True and flagC == True:
		break

rowNum=1
#创建头部信息
sheet.cell(row=rowNum, column=1).value='PRODUCE'
sheet.cell(row=rowNum, column=2).value='COST PER POUND'
sheet.cell(row=rowNum, column=2).value='POUNDS SOLD'
rowNum+=1

#将存储的信息调入example.elxs中
for key in speics_plus.keys():
	col=1
	sheetone.cell(row=rowNum, column=col).value=key
	col+=1
	for item in speics_plus[key]:
		sheetone.cell(row=rowNum, column=col).value=item
		col+=1
	rowNum+=1

wbone.save('example.xlsx')

效果:

差强人意~~~

2,从网站、文本文件或剪贴板读取数据,将它写入电子表格

要用到第八章 读写文件 的知识,

读取数据 从.txt文件

helloFile = open('C:\\Users\\your_home_folder\\hello.txt')
helloContent = helloFile.read()
helloContent

从.txt中读取数据,然后存入xlxs中

3,自动清理电子表格中的数据。例如,可以利用正则表达式,读取多种格式的电
话号码,将它们转换成单一的标准格式

知识点:第七章 模式匹配与正则表达式

import re
phoneNumRegex = re.compile(r'\d\d\d-\d\d\d-\d\d\d\d')
mo = phoneNumRegex.search('My number is 415-555-4242.')
print('Phone number found: ' + mo.group())

Phone number found: 415-555-4242

读取多种格式的电话号码    要进行多次正则匹配,因为无法一次匹配多个正则标准

关于12.8,12.9,12.10 import Error:https://blog.csdn.net/weixin_41569319/article/category/7753938

12.13 实践项目

12.13.1 乘法表

import openpyxl
wb = openpyxl.Workbook()
sheet = wb.get_active_sheet()

n=input("输入n:")
n=int(n)
for i in range(1,n+1):
	sheet.cell(row=1, column=i+1).value=i
	sheet.cell(row=i+1, column=1).value=i
	for j in range(1,n+1):
		sheet.cell(row=i+1, column=j+1).value=i*j

wb.save('writeFormula.xlsx')

没用命令行,因为没将这个文件夹添加至 环境变量

12.13.2 空行插入程序

python中的逆序遍历:

for i in range(n,1,-1)
#从第二行开始插入两行空白

import openpyxl
wb = openpyxl.load_workbook('example.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')

n=2
m=2

for i in range(sheet.max_row,n-1,-1):
	sheet.cell(row=i+m,column=1).value=sheet.cell(row=i,column=1).value
	#必须指定row与column
	
	
for i in range(n,n+m):
	sheet.cell(row=i,column=1).value=""
wb.save('example_one.xlsx')

12.13.3 电子表格单元格翻转程序

同时打开两个Excel,for i ,for j 遍历即可

12.13.4 文本文件到电子表格

能把这行的赋值控制好即可

sheet.cell(row=i, column=j+1).value=..

12.13.5 电子表格到文本文件

沿纵轴遍历,for j

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值