#python #excel #unicode #python-2.x
#python #excel #юникод #python-2.x
Вопрос:
У меня есть скрипт, который сканирует лист Excel и печатает столбец A и диапазон строк, который выводит список на python 2, но имеет ожидаемый символ юникода, от которого я, похоже, не могу понять, как избавиться после ссылки на несколько сообщений stack overflow.
(6188, u'machine1')
(6189, u'machine2')
import openpyxl
wb = openpyxl.load_workbook('AnsibleReadinessReviewIP.xlsx')
sheet = wb['CIsIPaddresses']
sheet['A301']
sheet['A301'].value
A = sheet['A301']
A.value
sheet.cell(row=301, column=A)
# Get the row, column, and vlaue from the cell
'Row %s, Column %s is %s' % (A.row, A.column, A.value)
'Cell %s is %s' % (A.coordinate, A.value)
sheet['A301']
for i in range('301, 6197'):
print(i, sheet.cell(row=i, column=2).value)
Как мне удалить unicode u’ из вывода списка? Заранее спасибо.
Ответ №1:
Если вы видите u
, вы используете Python 2. В Python 2 print
является оператором, а не функцией, поэтому не вызывайте его в круглых скобках. Вызов с помощью ()
заставляет его печатать кортеж, а отображение кортежа по умолчанию должно использоваться repr()
для элементов кортежа.
Python 2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:25:58) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> i=6188
>>> value = u'machine1'
>>> print(i,value) # prints a tuple, which uses `repr()` for items.
(6188, u'machine1')
>>> print i,value # prints values using `str()`, which won't display `u`.
6188 machine1
Python 2 будет печатать только символы Юникода, поддерживаемые кодировкой терминала, поэтому вы можете получить страшное UnicodeEncodeError
, если у вас есть кодовые точки Юникода за пределами кодировки вашего терминала по умолчанию. Переключитесь на Python 3 для лучшей обработки Юникода. Python 2 — это EOL.
Комментарии:
1. спасибо за простую демонстрацию, я смог решить проблему таким образом.
print i,sheet.cell(row=i, column=1).value
дал мне номера строк и имена хостов, которые мне были нужны2. спасибо за простую демонстрацию, я смог решить проблему.
print i,sheet.cell(row=i, column=1).value
иfor i in range(301, 6197): # removed quotes to fix
и удалил скобки изprint i,sheet.cell(row=i, column=1).value
дал мне номера строк и имена хостов, которые мне были нужны
Ответ №2:
измените нижеприведенные строки в вашем скрипте:
вариант a: печать(i, str(лист.ячейка (строка = i, столбец = 2).значение)) вариант b:a.print (i, (лист.ячейка(строка= i, столбец= 2).значение).кодировать (‘ascii’,
Комментарии:
1. Я не могу понять это. Используйте правильное форматирование кода.
2. пожалуйста, используйте любой 1 вариант, упомянутый в предыдущем посте, в вашем скрипте