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

posted on 2016-11-07 08:17  lexn  阅读(426)  评论(0编辑  收藏  举报

导航