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

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

23.08.2013, 05:34. Показов 12794. Ответов 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
Ответ Создать тему
Новые блоги и статьи
BOINC: 22 года — и всё ещё работает
Programma_Boinc 12.03.2026
BOINC: 22 года — и всё ещё работает Дэвид Андерсон написал ретроспективу. Кратко: в 2001 году он ушёл из United Devices, где был CTO, и за несколько месяцев написал ядро BOINC — клиент, сервер,. . .
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru