想问问各位,用的是python,这个问题是什么意思,怎么解决:
TypeError: descriptor 'decode' for 'bytes' objects doesn't apply to a 'NoneType' object
我是想把从excel(把这个excel叫做one)里导出的数据再写入到另外一个excel(把这个excel叫做two)里面,one里面的数据格式是“自定义”里面的“0”,但是再写入的时候就出现这个报错了,求解答
import xlrd#(pip install xlrd==1.2.0)
import os
from xlutils.copy import copy
from xlwt import Style
#writeExcel函数,row第几行,col第几列,str写入内容,styl格式(默认)
def writeExcel(row,col,str,styl=Style.default_style):
rb = xlrd.open_workbook(r'F:\来自分享\dbf\two.xls',formatting_info=True)
wb = copy(rb)
ws = wb.get_sheet(1)
ws.write(row,col,str,styl)
wb.save(r'F:\来自分享\dbf\two.xls')
#find函数,path路径名称,file文件名称,id身份证号
def find(path,file,id):
for rt, dirs, files in os.walk(path):
for f in files:
if f == file:
aim_path = rt + os.path.sep + f
workbook = xlrd.open_workbook(aim_path)
sheet_names = workbook.sheet_names()
all_value = workbook.sheet_by_index(0)
length = all_value.nrows
x = 2
y = 1
z = 2
styl=Style.default_style
for i in range(length):
row = all_value.row_values(i)
if id == row[8]:
print(row[7])
print(int(row[14]))
ZQZHHM = row[7].encode('utf8')
CYSL = row[14]
writeExcel(x,y,ZQZHHM,styl)
writeExcel(x,z,CYSL,styl)
x = x + 1
path_ = input('请输入想要搜索的路径:')#这里会输入一个one文件的目录
file_ = input('请输入想要搜索的文件名称:')#这里输入“one.xlsx”
while True:
id = input('请输入身份证id:')
find(path_,file_,id)
TypeError: descriptor 'decode' for 'bytes' objects doesn't apply to a 'NoneType' object
类型错误,你无法把一个None类型的值使用 decode 解码
发下代码看看吧
有帮助的话,请点采纳该答案~
该回答引用GPTᴼᴾᴱᴺᴬᴵ
这个错误通常发生在试图对NoneType对象调用decode()方法时,因为NoneType对象是不可调用decode()方法的。这个错误可能与你从Excel文件中读取的数据有关。
一种可能的解决方法是,在将数据写入Excel文件之前,先检查数据是否为空,以避免将NoneType对象传递给Excel写入函数。可以使用Python中的if语句或try-except语句来实现这一点。
以下是一个简单的示例,演示如何使用try-except语句来避免将NoneType对象传递给Excel写入函数:
import openpyxl
# 读取Excel文件
wb = openpyxl.load_workbook('one.xlsx')
ws = wb.active
# 创建一个新的Excel文件
wb2 = openpyxl.Workbook()
ws2 = wb2.active
# 遍历one中的行,并将数据写入two中
for row in ws.iter_rows():
try:
# 检查单元格是否为空
if row[0].value and row[1].value and row[2].value:
# 将数据写入two中
ws2.append([row[0].value, row[1].value, row[2].value])
except AttributeError:
# 如果单元格为空,则跳过
pass
# 保存two文件
wb2.save('two.xlsx')
这个示例首先打开名为“one.xlsx”的Excel文件,并将数据读取到名为“ws”的工作表中。然后,它创建了一个名为“two.xlsx”的新Excel文件,并将数据写入到名为“ws2”的工作表中。在遍历one工作表的每一行时,它使用try-except语句来检查每个单元格的值是否为空。如果单元格不为空,则将数据写入two工作表中的对应单元格。如果单元格为空,则使用pass语句跳过该单元格。最后,它保存two.xlsx文件。