С Новым годом! Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.98/63: Рейтинг темы: голосов - 63, средняя оценка - 4.98
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 4

Как записать русский текст в xls-файл?

23.08.2013, 05:34. Показов 12763. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
С помощью модулей xlrd/xlwt открываю xls таблицу, вношу какие-нибудь изменения, сохраняю измененные данные и на выходе получаю изменения в кодировке русских букв.

Пример кода:
Python
1
2
3
4
5
6
7
8
9
10
11
# -*- coding: utf-8 -*-
from xlwt import *
from xlrd import *
from xlutils.copy import copy
 
wb_src = open_workbook ('c:\outlets_ref.xls',formatting_info=True)
wb_dst = copy(wb_src)
 
ws_dst = wb_dst.get_sheet(0)
ws_dst.write(0, 9, 'active')
wb_dst.save('c:\outlets_ref.xls')
В исходной таблице было:
Code
1
1298    1298    Сокол              2461-435    г Владивосток у Есенина д75
Стало:
1298 1298 Ñîêîë 2461-435 ã Âëàäèâîñòîê ó Åñåíèíà ä75
Когда проверяю текст
Ñîêîë
перекодировщиком Лебедева, он сообщает, что для приведения в читаемый вид использовалась конвертация cp1252 -> cp1251

Как мне сохранять листы экселя, чтобы выходной файл был читаем?

Добавлено через 1 час 10 минут
Даже, когда исполняю

Python
1
2
3
4
5
6
7
8
# -*- coding: utf-8 -*-
import xlwt 
import xlrd 
from xlutils.copy import copy
 
wb_src = xlrd.open_workbook ('c:\outlets_ref.xls',formatting_info=True)
ws_src = wb_src.sheet_by_index(0)
print ws_src.cell_value(4,2).encode('utf-8')
результат выводится

Ñîêîë
Из этого становится понятно, что проблема возникает ещё при открытии файла, а не при сохранении. Нельзя ли как-то построчно конвертнуть кодировку после открытия и перед сохранением?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.08.2013, 05:34
Ответы с готовыми решениями:

Как записать русский текст в файл?
std::ofstream m_fOutput(PathFile); std::string Error = "Ошибка открытия файла"; if (!m_fOutput.is_open()) throw Error;...

Как с консоли записать в файл русский текст
Как с консоли записать в файл русский текст? Если так, то пишется только английский: #include <iostream> using namespace...

Записать в файл русский текст
Никак не могу записать в файл русский текст через fprintf, записываются каракули. Использую Linux Ubuntu. Помогите, пожалуйста

8
 Аватар для ilnurgi
141 / 141 / 38
Регистрация: 20.02.2012
Сообщений: 597
23.08.2013, 07:42
Python
1
wb_src = open_workbook ('c:\outlets_ref.xls',formatting_info=True, encoding_override='кодировка файла')
а так?
и при сохранении может можно задать кодировку? Если погуглить.
0
Z3JheSBoYXQ=
 Аватар для fanatdebian
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
23.08.2013, 10:45
Проблема в том, что изначальный файл имеет кодировку отличную от utf. Предположу, что cp1251. Поэтому когда ты открываешь файл то интерпретатор питона преобразует входной поток согласно дефолтным установкам, если не задано иное, в # -*- coding: utf-8 -*- и сохраняешь ты данные в utf8, а надо или сохранять в cp1251 или изначально преобразовывать весь файл в utf8 а потом уже проводить чтение / запись в utf.

1. Преобразуешь до изменение весь файл в формат utf.
2. Проводишь операции in/out в utf.
3. Сохраняешь данные закрываешь поток.

Либо

1. Получаешь данные в исходной кодировке ( cp1251)
2. Проводишь операции в in/out в чем угодно urf/cp/ или другое.
3. Конвертируешь все изменения в исходную кодировку (cp1251)
4. Сохраняешь эти изменения и закрываешь поток.
1
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
23.08.2013, 12:31
Цитата Сообщение от fanatdebian Посмотреть сообщение
Поэтому когда ты открываешь файл то интерпретатор питона преобразует входной поток согласно дефолтным установкам, если не задано иное, в # -*- coding: utf-8 -*-
эта кодировка имеет отношение только к самому файлу скрипта (к тому, что написано в скрипте)
а у него просто перегоняется текст
нужно указать кодировку открытия/записи xls-файла

Добавлено через 58 секунд
Цитата Сообщение от DenRomanoff Посмотреть сообщение
Python
1
'c:\outlets_ref.xls'
бэкслеши нужно экранировать
1
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 4
24.08.2013, 03:36  [ТС]
Цитата Сообщение от ilnurgi Посмотреть сообщение
Python
1
wb_src = open_workbook ('c:\outlets_ref.xls',formatting_info=True, encoding_override='кодировка файла')
а так?
и при сохранении может можно задать кодировку? Если погуглить.
Пробовал указывать и encoding и encoding_override. Такое ощущение, что питон просто игнорирует эти параметры.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
24.08.2013, 10:09
этим создал файл
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env python
# coding: utf-8
 
# создать file.xls и записать в него строку
 
import xlwt.Workbook
 
s = u'абвг'
 
book = xlwt.Workbook(encoding='utf-8')
sheet = book.add_sheet(u'Лист1')
sheet.write(0, 0, s)
book.save('file.xls')
этим поменял файл
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/usr/bin/env python
# coding: utf-8
 
from xlwt import *
from xlrd import *
from xlutils.copy import copy
 
wb_src = open_workbook('file.xls', formatting_info=True)
wb_dst = copy(wb_src)
 
ws_dst = wb_dst.get_sheet(0)
ws_dst.write(0, 9, 'active')
wb_dst.save('file.xls')
под линем пишет нормально
0
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 4
24.08.2013, 11:15  [ТС]
Цитата Сообщение от accept Посмотреть сообщение

под линем пишет нормально
Под виндой тоже нормально, если создавать книгу и наполнять кириллицей средствами питона. А проблема, скорее всего, в программе, которая генерирует мой исходный xls - она генерирует его в некошерной кодировке, из-за чего питон при открытии получает из него крякозябры. Поэтому я и интересуюсь, как бы эти крякозябры привести в читаемый вид, обработать нужным мне образом и записать обратно. Могу приложить исходный файл, если интересно.
Вложения
Тип файла: xls outlets_ref.xls (27.9 Кб, 9 просмотров)
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
24.08.2013, 23:49
Цитата Сообщение от DenRomanoff Посмотреть сообщение
А проблема, скорее всего, в программе, которая генерирует мой исходный xls - она генерирует его в некошерной кодировке
я создал в Excel'е файл, он создался нормально

Цитата Сообщение от DenRomanoff Посмотреть сообщение
В исходной таблице было:
Code
1
1298    1298    Сокол               2461-435    г Владивосток у Есенина д75
это не так, в исходной таблице уже неправильная кодировка, просто Excel её определяет автоматически и показывает, будто всё нормально

перекодировать можно через csv-файл
но лучше посмотреть ту программу, которая выдаёт в таком виде
1
0 / 0 / 0
Регистрация: 23.08.2013
Сообщений: 4
25.08.2013, 03:04  [ТС]
Цитата Сообщение от accept Посмотреть сообщение
перекодировать можно через csv-файл
но лучше посмотреть ту программу, которая выдаёт в таком виде
"Та программа" - это жутко древний, ровесник динозавров PARADOX 5. Но через csv, вроде как, всё приобрело нормальный, читаемый вид.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# -*- coding: utf-8 -*-
import csv, xlwt
 
files = ['\\outlets.csv']
 
for i in files:
    f=open(i, 'rb')
    g = csv.reader ((f), delimiter=";", quotechar='"')
    wbk= xlwt.Workbook()
    sheet = wbk.add_sheet(u'Торговые точки')
 
    for rowi, row in enumerate(g):
        for coli, value in enumerate(row):
            sheet.write(rowi,coli,value.decode('cp1251'))
 
    wbk.save(i + '.xls')
Большое спасибо за помощь.
Вложения
Тип файла: zip outlets.csv.zip (6.0 Кб, 19 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.08.2013, 03:04
Помогаю со студенческими работами здесь

Xcode , С++ и русский язык: как вывести в файл русский текст без сбитой кодировки?
Как сделать так, чтобы после некоторых манипуляций в файл выводился русский текст без сбитой кодировки?

нужно зашифровать текст в файле с помощю чисел, записать шифр в другой файл, потом разшифровать и записать разшифрованый текст в третий файл
нужно зашифровать текст в файле с помощю чисел, записать шифр в другой файл, потом разшифровать и записать разшифрованый текст в третий файл

Как в файл вывести русский текст?
Когда русский текст вывожу в файл выводит какую то какафонию как это исправить

Как получить текст из input в html файле, и записать текст оттуда в текстовый файл на сервере используя node.js?
Столкнулся с проблемой при написании курсовой работы, необходимо по нажатию кнопки на сайте, получить строки из input и записать в...

В файле содержится текст. Вывести в отдельный текстовый файл первые буквы всех слов (русский текст)
Можно пожалуйста код с нуля


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru