UnicodeEncodeError: кодек "ascii" не может кодировать символы в позиции 10-11: порядковый номер не в диапазоне (128)

Я пытаюсь сделать сценарий. Скрипт, который будет искать через файл.xls и распечатывать строки, для которых условия выполняются. У меня нет проблем с этим. У меня, однако, есть проблема, когда мне нужно записать эту строку в файл.

это код:

import xlrd    
import string
dataFile = open('Napadaci.txt', 'w')
workbook = xlrd.open_workbook('TBS_58_pos10_stars75_2014-02-09.xls')
worksheet = workbook.sheet_by_name('Sheet1')
num_rows = worksheet.nrows - 1
num_cells = worksheet.ncols - 1
curr_row = -1
b = 0
new_cell_value = ""
while curr_row < num_rows:
      curr_row += 1
  row = worksheet.row(curr_row)
  curr_cell = 4
  cell_value = worksheet.cell_value(curr_row, curr_cell)
  if cell_value < 17.0:
    curr_cell = 5
    cell_value = worksheet.cell_value(curr_row, curr_cell)
    if cell_value == 95.0:
        curr_cell = 9
        cell_value = worksheet.cell_value(curr_row, curr_cell)
        if cell_value == "Tehnical" or cell_value == "Quick" or cell_value == "Head" or cell_value == "Unpredictable":  
            b += 1
            dataFile.write(str(b)+'\n')
            curr_cell = -1
            while (curr_cell + 1) < num_cells:
                curr_cell += 1
                cell_value = worksheet.cell_value(curr_row, curr_cell)
                new_cell_value=cell_value
                if isinstance(cell_value, str):
                    new_cell_value = cell_value.encode('ascii','ignore')
                dataFile.write(str(new_cell_value)+'\n')
        dataFile.write(str('Trazim sljedeceg')+'\n'+'\n'+'\n'+'\n')

Итак, куча ifs, чтобы убедиться, что строка точно. Но, когда я пытаюсь запустить его, я получаю сообщение об ошибке: UnicodeEncodeError: кодек "ascii" не может кодировать символы в позиции 10-11: порядковый номер не в диапазоне (128). Я погуглил и обнаружил, что это потому, что в файле.xls I есть такие символы:šć и т. д. Я прохожу все ячейки одну за другой, и я решил, что мне нужно решить эту проблему только в тех ячейках, где у меня есть строки, следовательно, самый последний, если. Я совершенно уверен, что

    new_cell_value = cell_value.encode('ascii','ignore')

линия должна это исправить, но этого не происходит. Пожалуйста, помогите, я не знаю, что я делаю не так. Если вам нужна дополнительная информация. У меня есть Python 2.7.3, и я использую Ubuntu 12.04

Изменить: Да, и эти персонажи не очень важны для меня, поэтому я могу потерять их, если это необходимо.

1 ответ

Решение

Проблема здесь заключается в утверждении if.

>>> uni = u"\u04533testing"
>>> print uni
ѓ3testing
>>> isinstance(uni, str)
False
>>> type(uni)
<type 'unicode'>

Поскольку этот объект не является строкой, это строка в кодировке Юникод. Поэтому этот код никогда не ударится. Ты хочешь

if isinstance(cell_value,unicode):
Другие вопросы по тегам