Python2.7.11:TypeError:期望的字符串或缓冲区

时间:2016-05-11 11:09:12

标签: python regex openpyxl

我正在编写一个打开xlsx工作表的脚本,检查第6列中是否存在特定值,如果是,则获取第2列的相应值。 得到一些问题:

import openpyxl
import os
import time
import re

ws = openpyxl.load_workbook(r'C:\Users\Desktop\All_data_sheet.xlsx')
text_file = open(r'C:\Users\Desktop\Output.txt', "w")

topo_sheet =ws.get_sheet_by_name('Rational Web')

#Getting max rows and max columns in each sheet
topo_max_rows = topo_sheet.get_highest_row()
topo_max_columns =  topo_sheet.get_highest_column()

for ro in range(2,topo_max_rows+1):
    match = re.search(r"acl",topo_sheet.cell(row= ro , column =6).value)
    if match:
    text_file.write(topo_sheet.cell(row= ro , column =1).value)
text_file.close()

我收到此错误:

Traceback (most recent call last):
  File "C:\Users\Desktop\script.py", line 28, in <module>
    match = re.findall(r"acl",topo_sheet.cell(row= ro , column =6).value)
  File "C:\Python27\lib\re.py", line 181, in findall
    return _compile(pattern, flags).findall(string)
TypeError: expected string or buffer

1 个答案:

答案 0 :(得分:1)

topo_sheet.cell(row= ro , column =6).value不是至少一个单元格的字符串。返回的Cell().value引用类型也可以是intfloatdatetime对象,请参阅openpyxl documentation

  

获取或设置单元格中保存的值。 :rtype:取决于值(字符串,float,int或datetime.datetime

始终将值转换为unicode字符串(因此即使特定单元格不保留文本也可以使用正则表达式)或测试首先生成的值的类型。

总是很容易转换为unicode:

match = re.search(r"acl", unicode(topo_sheet.cell(row=ro , column=6).value))

或首先测试类型(如果您只想在文本的一部分匹配数字或日期时,这绝对是必需的):

cell = topo_sheet.cell(row=ro , column=6)
if cell.data_type == cell.TYPE_STRING:
    match = re.search(r"acl", cell.value)