一、写代码前需要注意事项
首先我们需要注意:
python xlrd库的新版本2.0.1版本移除了对.xlsx格式的支持,只支持.xls格式。报错信息如下:
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/xlrd/__init__.py", line 170, in open_workbook
raise XLRDError(FILE_FORMAT_DESCRIPTIONS[file_format]+'; not supported')
xlrd.biffh.XLRDError: Excel xlsx file; not supported
解决方法:将xlrd版本回退到1.2.0版本,使用旧版本支持.xlsx格式。
pip3 uninstall xlrd
pip3 install xlrd=1.2.0
然后我们就可以开始愉快的写代码了
二、基本语法
导入模块
import xlrd
打开指定的excel文件,返回一个data对象
data = xlrd.open_workbook(file) #打开excel表,返回data对象
通过data对象可以得到各个sheet对象(一个excel文件可以有多个sheet,每个sheet就是一张表格)
Sheet1 = data.sheet_by_index(0) #通过索引顺序获取
Sheet1 = data.sheet_by_name(u‘sheet1’) #通过名称获取
Sheet1 = data.sheets()[0] #通过索引顺序获取
num =data.nsheets #返回sheet的数目
list = data.sheets() #返回所有sheet对象的列表
list = data.sheet_names() #返回所有sheet对象名字的列表
通过sheet对象可以获取各个单元格,每个单元格是一个cell对象
name = sheet1.name #返回sheet1的名称
nrows =sheet1.nrows #返回sheet1的行数
ncols = sheet1.ncols #返回sheet1的列数
sheet1.cell_type(x,y) #返回cell的对象类型
sheet1.cell(x,y).ctype #返回cell的对象类型
# 即date的ctype=3,这时需要使用xlrd的xldate_as_tuple来处理为date格式
#先判断表格的ctype=3时xldate才能开始操作。
2.1、python读取excel中单元格的内容返回的有5种类型。
ctype : 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error。
一般情况下读取Excel中数字会自动转换为浮点数,若想判断读取为浮点数可以使用如下方法:
ctype == 2 and cell % 1 == 0.0 # ctype为2且为浮点
sheet1.cell_value(x,y) #返回cell的值
sheet1.cell(x,y).value #返回cell的值
sheet1.row(x) #获取指定行,返回cell对象的列表
sheet1.row_values(x) #获取指定行,返回列表
sheet1.col(x) #获取指定列,返回cell对象的列表
sheet1.col_values(x) #获取指定列,返回列表
三、实践案例
这有一张表,我们要取F列
import xlrd
excel=xlrd.open_workbook(r'C:\Users\siyu.guan\Desktop\删除节目单20230119.xlsx')
sheet=excel.sheet_by_index(0)
contenct = sheet.col_values(5)
print(type(contenct))
b = 0
for a in range(67):
id = []
for i in range(b,b+1000):
contenct[i] = str(contenct[i])
if 'jet' in contenct[i] or 'JC' in contenct[i] or 'JSB' in contenct[i]:
#print(contenct[i]+",",end='')
id.append(contenct[i])
id = str(id)
id = id.replace('[','').replace('\'','').replace(']','')
print(id)
with open(f'movieid/test{a}.txt','w') as file:
file.write(id)
file.close()
b = b+1000
大概就是这样