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写入汉字还有问题