第一次尝试使用python读写Excel文件

转载自己文字

在第一次尝试使用python读写Excel文件时,发现在使用xlrd模板后,python可以很方便的读取Excel中的文件,且代码较为简单,大致如下:
import os //使用import os 的目的就是为了改变当前工作路径
import xlrd
os.chdir(‘当前路径’)
file=xlrd.open_workbook(‘文件名称‘)
sheet=file.sheets()[0]
temp = sheet.cell(rows,cols)//如此便可以读出值
但是在尝试向其中写入值时发现无法保存文件,需要用到xlutils,直接import报错:
显示没有该模板。


所以只有去下载安装该模板,在官方网站:https://pypi.python.org/pypi/xlutils 得到该包,然后解压该文件,最好将解压后文件放在python目录下,然后使用cmd进入该目录,使用如下命令:
setup.py install
接着程序又会报错如下:
在 cmd 下执行命令 python setup.py install 出现如下错误:
Traceback (most recent call last):  
File "setup.py", line 5, in    
from setuptools import setup ImportError: No module named setuptools


其表明确实setuptools模板,所以需要去下载,网址如下:setuptools-0.6c11.win32-py2.7.exe 
直接安装即可。
然后再重新安装xlutils 即可成功。
其数据保存方法如下:
# 类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
xf = 0 # 扩展的格式化


wb = copy(first)
sheet = wb.get_sheet(0)
sheet.wirte(rows,index,’’)
wb.save(‘’)
注意只能保存成xls格式的


在这里使用的copy来进行操作,所以要引入xlutils包


但是除此之外,还可以直接用xlwt包,直接来新建Excel文件来进行操作,更加方便,且其不需要从外部重新导入包,故后来采用直接用xlwt包的。
下边是第一次尝试的时候的代码:
import os
>>> os.chdir('C:\Users\Administrator\Desktop')
>>> import xlrd
>>> first = xlrd.open_workbook('orgin/S1.xlsx')
>>> import xlwt
>>> t_f=xlwt.Workbook()
>>> t_f=xlwt.Workbook(encoding='utf-8')//防止汉字乱码
>>> t_s=t_f.add_sheet('A',cell_overwrite_ok=True)//防止重
>>> row=4
>>> sheet=first.sheets()[0]
>>> rows_count=sheet.nrows
>>> while (row<(rows_count-2)):
back_biao_one=sheet.cell(row,1)
back_dis_one=sheet.cell(row,2)
front_biao_one=sheet.cell(row+1,1)
front_dis_one=sheet.cell(row+1,2)
front_biao_two=sheet.cell(row+2,1)
front_dis_two=sheet.cell(row+2,2)
back_biao_two=sheet.cell(row+3,1)
back_dis_two=sheet.cell(row+3,2)
t_s.write(row-4,0,back_dis_one)
row=row+4


 


Traceback (most recent call last):
File "", line 10, in
t_s.write(row-4,0,back_dis_one)
File "build\bdist.win32\egg\xlwt\Worksheet.py", line 1030, in write
self.row(r).write(c, label, style)
File "build\bdist.win32\egg\xlwt\Row.py", line 259, in write
raise Exception("Unexpected data type %r" % type(label))
Exception: Unexpected data type
第一次尝试的时候,总是报出上述错误,后来发现错误的原因是由于在各种值中还没有读入value,其值依旧是cell,故对while修改即可,如下:
while (row <= (rows_count-2)):
back_biao_one=sheet.cell(row,1).value
back_dis_one=sheet.cell(row,2).value
front_biao_one=sheet.cell(row+1,1).value
front_dis_one=sheet.cell(row+1,2).value
front_biao_two=sheet.cell(row+2,1).value
front_dis_two=sheet.cell(row+2,2).value
back_biao_two=sheet.cell(row+3,1).value
back_dis_two=sheet.cell(row+3,2).value
t_s.write_merge(row-4,row-4,0,1,back_dis_one)
t_s.write_merge(row-4,row-4,2,3,front_dis_one)
t_s.write_merge(row-3,row-3,2,3,front_dis_two)
t_s.write_merge(row-3,row-3,0,1,back_dis_two)
t_s.write(row-4,4,'Back')
t_s.write(row-3,4,'Front')
t_s.write(row-2,row-1,'Back-Front')
t_s.write(row-4,5,back_biao_one)
t_s.write(row-4,6,front_biao_one)
t_s.write(row-3,6,front_biao_two)
t_s.write(row-3,5,back_biao_two)
row=row+4
最后对其进行函数封装如下:
def format_mydata(filename,disfilename):
first=xlrd.open_workbook(filename)
sheet=first.sheets()[0]
row=4
index=1
rows_count=sheet.nrows
t_f=xlwt.Workbook(encoding='utf8')
t_s=t_f.add_sheet('A',cell_overwrite_ok=True)
while (row <= (rows_count-2)):
t_s.write_merge(row-4,row-1,0,0,index)
index=index+1
back_biao_one=sheet.cell(row,1).value
back_dis_one=sheet.cell(row,2).value
front_biao_one=sheet.cell(row+1,1).value
front_dis_one=sheet.cell(row+1,2).value
front_biao_two=sheet.cell(row+2,1).value
front_dis_two=sheet.cell(row+2,2).value
back_biao_two=sheet.cell(row+3,1).value
back_dis_two=sheet.cell(row+3,2).value
t_s.write_merge(row-4,row-4,1,2,back_dis_one)
t_s.write_merge(row-4,row-4,3,4,front_dis_one)
t_s.write_merge(row-3,row-3,3,4,front_dis_two)
t_s.write_merge(row-3,row-3,1,2,back_dis_two)
temp1=(back_dis_one+back_dis_two)/2
temp2=(front_dis_one+front_dis_two)/2
t_s.write_merge(row-2,row-2,1,2,temp1)
t_s.write_merge(row-2,row-2,3,4,temp2)
t_s.write_merge(row-1,row-1,1,2,temp1-temp2)
t_s.write_merge(row-1,row-1,3,4,'')
t_s.write(row-4,5,'Back')
t_s.write(row-3,5,'Front')
t_s.write_merge(row-2,row-1,5,5,'Back-Front')
temp1=back_biao_one-front_biao_one
temp2=back_biao_two-front_biao_two
t_s.write(row-4,6,back_biao_one)
t_s.write(row-4,7,back_biao_two)
t_s.write(row-3,7,front_biao_one)
t_s.write(row-3,6,front_biao_two)
t_s.write(row-2,6,temp1)
t_s.write(row-2,7,temp2)
t_s.write_merge(row-1,row-1,6,7,(temp1+temp2)/2)
row=row+4
t_f.save(disfilename)


进行运行时:
>>> import xlrd
>>> import xlwt
>>> import os
>>> os.chdir('C:\Users\Administrator\Desktop')
>>> format_mydata('orgin/S1.xlsx','des/S1.xls')
>>> format_mydata('orgin/S2r.xls','des/S2.xls')
>>> format_mydata('orgin/S3.xlsx','des/S3.xls')
>>> format_mydata('orgin/S456r.xls','des/S456.xls')
>>> format_mydata('orgin/S7.xlsx','des/S7.xls')
>>> format_mydata('orgin/S8.xlsx','des/S8.xls')
>>> format_mydata('orgin/S9r.xlsx','des/S9.xls')
>>> format_mydata('orgin/S9r.xls','des/S9.xls')
>>> format_mydata('orgin/S10.xlsx','des/S10.xls')
>>> format_mydata('orgin/S11.xlsx','des/S11.xls')
>>> format_mydata('orgin/S12r.xlsx','des/S12.xls')
>>> format_mydata('orgin/S12r.xls','des/S12.xls')
>>> format_mydata('orgin/S13.xlsx','des/S13.xls')
>>> format_mydata('orgin/S13.xls','des/S13.xls')
>>> format_mydata('orgin/S14rr.xls','des/S14.xls')
>>> format_mydata('orgin/S15.xls','des/S15.xls')


最后结果就得到了。


本方法的缺点在于:
还没有完成对其颜色的设置,后来手工填充的。
部分数据的运算也没有完成

Python 使用多种库来进行 Excel 文件的操作,其中比较常用的有 `pandas`、`openpyxl` 和 `xlrd`。下面我会分别简述如何利用这三个库打开并读取 Excel 文件。 ### 1. pandas `pandas` 是 Python 中非常流行的数据分析库,它集成了数据读写、操作和分析功能,对于 Excel 文件的支持也很友好。以下是使用 `pandas` 打开并读取 Excel 文件的基本步骤: ```python import pandas as pd # 加载 Excel 文件 df = pd.read_excel('your_file.xlsx', engine='openpyxl') # 查看前几行数据 print(df.head()) ``` ### 2. openpyxl `openpyxl` 主要是针对 `.xlsx` 格式文件设计的一个库,用于读写表格文件使用 `openpyxl` 需要注意的是,它只支持 `xlsx` 文件,并且需要安装额外的依赖包如 `numpy`。 ```python from openpyxl import load_workbook # 加载工作簿 wb = load_workbook('your_file.xlsx') sheet = wb.active # 如果想要指定特定的工作表,则可以写成 sheet = wb['SheetName'] # 获取单元格值 cell_value = sheet.cell(row=1, column=1).value print(cell_value) # 访问所有数据 for row in sheet.iter_rows(): for cell in row: print(cell.value) ``` ### 3. xlrd `xlrd` 是一个用于读取 Excel 文件的轻量级库,适用于 `.xls` 格式的文件,但不支持 `.xlsx`。如果你的文件只有 `.xls` 格式,可以选择这个库。 ```python import xlrd # 加载 Excel 文件 data = xlrd.open_workbook('your_file.xls') table = data.sheets() # 选择第一个表单 # 获取第一行的内容作为列名 columns = table.row_values(0) # 遍历每一行数据 for i in range(table.nrows): row_data = table.row_values(i) print(dict(zip(columns, row_data))) ``` ### 相关问题: 1. **为什么在某些版本的 Python 上运行时会出现错误?** 这可能是由于依赖库未正确安装或是版本兼容性问题导致的。例如,在使用 `pandas` 或者 `openpyxl` 时,请确保已通过 `pip install pandas openpyxl` 安装了相应的库。 2. **如何处理大型 Excel 文件,以提高性能?** 对于较大的 Excel 文件使用内存优化技术尤为重要。可以考虑限制加载文件时的行列范围,使用 `pandas` 的 `pd.read_excel` 函数时设置适当的参数,比如 `usecols` 来仅加载部分列,以及适当调整内存管理策略,避免一次性加载整个文件到内存中。 3. **如何将 Pandas DataFrame 写入到 Excel 文件?** 要将 `pandas` 的 DataFrame 写入 Excel 文件,可以使用 `to_excel` 方法: ```python df.to_excel('output.xlsx', index=False) # 可选参数 index=False 表示不写入索引 ``` 这三种方法覆盖了不同类型的 Excel 文件及其基本操作需求,可以根据实际需求选择合适的库进行操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值