python汉字对比输出问题
python汉字对比输出问题
一、汉字用for输出问题
汉字用for输出问题,被显示为16进制。
1)列表中的汉字,直接输出列表,也是在循环输出汉字。
>>> a = ['OS一部','OS二部','OS三部'] >>> a ['OS\xd2\xbb\xb2\xbf', 'OS\xb6\xfe\xb2\xbf', 'OS\xc8\xfd\xb2\xbf']
2)for 循环列表输出,仍然是16进制。
加了#-*- codeing=utf-8 -*- 会出现乱码。
#-*- coding:utf-8 -*- a = ['OS一部','OS二部','OS三部'] for i in a: print i for yichuan in a: for dan in yichuan: print dan b = '二部' for i in a: if b in i: print i >>> OS一部 OS浜岄儴 OS涓夐儴
针对以上可能出现的问题,将汉字放在列表中循环打出或是对比,若循环还是出问题,就循环列表的序号 for i in range(len(slist)):print slist[i]保证汉字没有被迭代。
总结,汉字被迭代显示有问题
二、对比问题
正常循环对比报错:
Traceback (most recent call last): File "C:/Python27/priTool/lltmod.py", line 63, in <module> ex.updateobser() File "C:/Python27/priTool/lltmod.py", line 23, in updateobser observer(self.zhu) File "C:/Python27/priTool/lltmod.py", line 42, in __call__ ret = self.uni_lightScreen(deplist) File "C:/Python27/priTool\mimiweapon.py", line 233, in uni_lightScreen if strings in slist[i].split('|')[2]: UnicodeDecodeError: 'ascii' codec can't decode byte 0xd2 in position 2: ordinal not in range(128)
asc码的问题都是编码的问题,需要先检查章节一问题。(注意这里曾经尝试过用16进制的显示出来字样去匹配,为见结果。)
排除汉字迭代的问题后,用==筛选,可能会有这样的报错
Warning (from warnings module): File "C:/Python27/priTool\mimiweapon.py", line 233 if strings == slist[i].split('|')[2]: UnicodeWarning: Unicode equal comparison failed to convert both arguments to Unicode - interpreting them as being unequal
我们将其decode('gbk'),然后再尝试对比。结果成果匹配。
class Excelcol(Manage):#注意 所有的excel 必须都带有列名 def __init__(self,filename): self.fn = filename self.ranger = 1 #游骑兵 全部列,行内容都可以此为准。 self.lightcavalry = 1 #轻骑兵,任何方法输出都可以先赋值。 self.head = [] def creatCol(self,coln,selectsheet=0,selectrow = 1): '''审查元素从 0 开始''' workbook = xlrd.open_workbook(self.fn)#创建一个excel操作类 #sheet1_name = workbook.sheet_names()[0] sheet1 = workbook.sheet_by_index(selectsheet)#构建一个sheet表类 cols = sheet1.col_values(coln) self.ranger = sheet1 return cols[selectrow:] def uni_lightScreen(self,slist,strings= 'OS一部'): #['OS\u4e00\u90e8','OS\u4e8c\u90e8',r'OS\u4e09\u90e8']): rot = [] suc = strings.decode('gbk') for i in xrange(len(slist)): print slist[i].split('|')[2] if suc == slist[i].split('|')[2]: rot.append(slist[i]) return rot
#! /usr/bin/env python import pymysql import xlrd import xlwt import pickle import re from mimiweapon import Excelcol class SourceEx(object): def __init__(self,filename): self.fn = filename self.zhu = Excelcol(self.fn) def updateExcel(self): pass def updateobser(self): for observer in self.observers: observer(self.zhu) def attach(self,observer): self.observers.append(observer) def __new__(cls,*args,**kwargs): cls.observers = [] return object.__new__(cls,*args,**kwargs) class ObserversZong(Excelcol): def __init__(self,exc,n): self.exc = exc self.n = n def __call__(self,ex_con): deplist = ex_con.creatCol(2) '''for i in range(len(deplist)): print deplist[i]''' ret = self.uni_lightScreen(deplist) print ret for i in range(len(ret)): print ret[i] class ObserverSource(Excelcol): def __init__(self,exc,n): self.exc = exc self.n = n def __call__(self,ex_con): print self.n ex = SourceEx(r'D:\yichuli\huawei_LLTTestCase.xlsx') o1 = ObserversZong(ex,1) ex.attach(o1) o2 = ObserverSource(ex,2) ex.attach(o2) ex.updateobser()
问题可以暂时解决。总结即为两大步骤,排除汉字迭代,解码unicode对比。
问题:
向excel写入汉字还有问题