#python #excel
#python #excel
Вопрос:
У меня есть файл Excel, который содержит два столбца, первый на китайском языке, а второй — просто ссылка. Я попробовал два метода, которые я нашел здесь. но это не сработало, и я не могу распечатать значение в консоли, я изменил свою переменную кодировки в настройках (pycharm) на U8, по-прежнему не работает. Я использовал библиотеки Pandas и xlrd, обе не работали, пока они работали для других, кто опубликовал. это мой текущий код :
from xlrd import open_workbook
class Arm(object):
def __init__(self, id, dsp_name):
self.id = id
self.dsp_name = dsp_name
def __str__(self):
return("Arm object:n"
" Arm_id = {0}n"
" DSPName = {1}n"
.format(self.id, self.dsp_name))
if __name__ == '__main__':
wb = open_workbook('test.xls')
for sheet in wb.sheets():
print(sheet)
number_of_rows = sheet.nrows
number_of_columns = sheet.ncols
items = []
rows = []
for row in range(1, number_of_rows):
values = []
for col in range(number_of_columns):
value = str(sheet.cell(row, col).value)
for a in value:
print('n'.join([a]))
values.append(value)
print(value)
for item in items:
print (item)
print("Accessing one single value (eg. DSPName): {0}".format(item.dsp_name))
print
очевидно, что это не работает, я просто возился с ним после отказа.
Файл : http://www59.zippyshare.com/v/UxITFjis/file.html
Ответ №1:
Дело не в кодировании, вы не получаете доступ к нужным строкам.
В строке 24
for row in range(1, number_of_rows):
почему вы хотите начать с 1 вместо 0.
попробуйте for row in range(number_of_rows):
Ответ №2:
Ну, проблема, с которой я столкнулся, заключалась не в чтении китайских символов на самом деле! моя проблема заключается в печати в консоли. Я думал, что кодировщик печати работает нормально, и я просто не прочитал его символы, но этот код работает нормально :
from xlrd import open_workbook
wb = open_workbook('test.xls')
messages = []
links = []
for sheet in wb.sheets():
number_of_rows = sheet.nrows
number_of_columns = sheet.ncols
for row in range(1, number_of_rows):
i = 0
for col in range(number_of_columns):
value = (sheet.cell(row,col).value).encode('gbk')
if i ==0:
messages.append(value)
else:
links.append(value)
i =1
print(links)
чтобы проверить это, я вставляю первый результат в драйвер selenium (поскольку я все равно собирался его использовать)
element = driver.find_element_by_class_name('email').send_keys(str(messages[0],'gbk'))
и это работает как шарм!