Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Питон и кодировка  (Прочитано 2177 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Luca Brasi

  • Автор темы
  • Активист
  • *
  • Сообщений: 706
  • typical engineer
    • Просмотр профиля
Питон и кодировка
« : 22 Марта 2015, 19:04:59 »
Скажу сразу, в Питоне я не силен. Передо мной такая задача - разобрать файл с большим количеством слов. Читаю каждую строку и обрезаю по '#', с этим все норм. Не могу отсортировать слова которые начинаються с буквы 'а'. Пробовал ставить условие, но ничего не выходит. Подскажите плиз.
Вот схема


(Нажмите, чтобы показать/скрыть)
Ubuntu 18.04/ AMD Ryzen 5 2600 3.4GHz/ MSI B450-A Pro Max / Crucial DDR4-3000 16384MB / MSI PCI-Ex GeForce GT 710 2048 MB / Chieftec GPS-600

Оффлайн RingOV

  • Активист
  • *
  • Сообщений: 764
    • Просмотр профиля
Re: Питон и кодировка
« Ответ #1 : 22 Марта 2015, 21:36:23 »
Запускать через python3
Код: (python) [Выделить]
#!/usr/bin/env python3

f = open('russian_word_base.txt', 'r')

i = 0

for line in f:
    i += 1
    temp = line.split('#')
    #Выводит ?числа? с количеством символов от 6 до 9
    if temp[0][0] == 'а' and 6<=len(temp[0])<=9:
        print (i, ':', temp[0])

Надо отсортировать или отфильтровать?

Оффлайн Luca Brasi

  • Автор темы
  • Активист
  • *
  • Сообщений: 706
  • typical engineer
    • Просмотр профиля
Re: Питон и кодировка
« Ответ #2 : 22 Марта 2015, 21:58:24 »
спасибо! Уже вроде разобрался. Нужно было отфильтровать. Добавил такой кусок
Цитировать
    if temp[:2] != little_symb  and temp[:2] != big_symb:
        print temp[:2]
        break
Для меня походу новость, но почему в кириллической строке длина в 2 раза больше чем в аналогичной на латинице? Свойство Юникода?
« Последнее редактирование: 22 Марта 2015, 22:05:13 от Luca Brasi »
Ubuntu 18.04/ AMD Ryzen 5 2600 3.4GHz/ MSI B450-A Pro Max / Crucial DDR4-3000 16384MB / MSI PCI-Ex GeForce GT 710 2048 MB / Chieftec GPS-600

Оффлайн RingOV

  • Активист
  • *
  • Сообщений: 764
    • Просмотр профиля
Re: Питон и кодировка
« Ответ #3 : 22 Марта 2015, 22:08:09 »
А текстовый файл точно в юникоде и запуск скрипта через python3?

Оффлайн Luca Brasi

  • Автор темы
  • Активист
  • *
  • Сообщений: 706
  • typical engineer
    • Просмотр профиля
Re: Питон и кодировка
« Ответ #4 : 22 Марта 2015, 22:36:55 »
file output:
Python script, UTF-8 Unicode text executable

Python 2.7.6 (default, Mar 22 2014, 22:59:38)
[GCC 4.8.2] on linux2
Ubuntu 18.04/ AMD Ryzen 5 2600 3.4GHz/ MSI B450-A Pro Max / Crucial DDR4-3000 16384MB / MSI PCI-Ex GeForce GT 710 2048 MB / Chieftec GPS-600

Оффлайн RingOV

  • Активист
  • *
  • Сообщений: 764
    • Просмотр профиля
Re: Питон и кодировка
« Ответ #5 : 22 Марта 2015, 22:38:49 »
python3 script.py$ python3
Python 3.4.0 (default, Apr 11 2014, 13:05:11)
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

Оффлайн Luca Brasi

  • Автор темы
  • Активист
  • *
  • Сообщений: 706
  • typical engineer
    • Просмотр профиля
Re: Питон и кодировка
« Ответ #6 : 22 Марта 2015, 23:27:44 »
Установлен питон3. Только я как правило запускал скрипты "./". В третьем питоне print чуть изменили. Но почему то вообще ничего не выводиться...

print (i, ':', temp_str)
Ubuntu 18.04/ AMD Ryzen 5 2600 3.4GHz/ MSI B450-A Pro Max / Crucial DDR4-3000 16384MB / MSI PCI-Ex GeForce GT 710 2048 MB / Chieftec GPS-600

Оффлайн RingOV

  • Активист
  • *
  • Сообщений: 764
    • Просмотр профиля
Re: Питон и кодировка
« Ответ #7 : 22 Марта 2015, 23:31:29 »
Ну тогда выкладывайте листинг кода и russian_word_base.txt для тестирования.

Оффлайн Luca Brasi

  • Автор темы
  • Активист
  • *
  • Сообщений: 706
  • typical engineer
    • Просмотр профиля
Re: Питон и кодировка
« Ответ #8 : 22 Марта 2015, 23:41:38 »
Все разобрался :). 3ий питон более менее работает нормально с кодировкой ЮТФ. Во всяком случае более логично. 2ой питон не имеет смысл использовать? Ну если с нуля писать код...
Ubuntu 18.04/ AMD Ryzen 5 2600 3.4GHz/ MSI B450-A Pro Max / Crucial DDR4-3000 16384MB / MSI PCI-Ex GeForce GT 710 2048 MB / Chieftec GPS-600

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Питон и кодировка
« Ответ #9 : 23 Марта 2015, 11:55:37 »
Luca Brasi, в 3 питоне серьёзно улучшили работу со строками содержащими не аски символы. 2 питон считает что символ - байт. А русские буквы расщепляет на два символа
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Питон и кодировка
« Ответ #10 : 23 Марта 2015, 12:14:30 »
alsoijw, ничего второй питон не расщепляет если правильно задан формат строки. Но соглашусь - с юникодом во втором питоне - не просто. 3-й в этом плане во многом более логичен.
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Питон и кодировка
« Ответ #11 : 23 Марта 2015, 12:31:38 »
Sly_tom_cat, если делать дополнительные телодвижения, то да. Но зачем, когда можно сделать из коробки?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

Оффлайн Luca Brasi

  • Автор темы
  • Активист
  • *
  • Сообщений: 706
  • typical engineer
    • Просмотр профиля
Re: Питон и кодировка
« Ответ #12 : 23 Марта 2015, 14:23:01 »
когда я запускал скрипт на втором питоне, я и представить не мог почему длина сроки с кириллицей в 2 раза большей длины чем должна быть. Щас понимаю более отчетливо)
Ubuntu 18.04/ AMD Ryzen 5 2600 3.4GHz/ MSI B450-A Pro Max / Crucial DDR4-3000 16384MB / MSI PCI-Ex GeForce GT 710 2048 MB / Chieftec GPS-600

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12139
  • Xubuntu 22.04
    • Просмотр профиля
    • Github
Re: Питон и кодировка
« Ответ #13 : 23 Марта 2015, 14:25:34 »
Если во втором питоне строку явно объявить как UTF-8, то там длинна будет тоже правильно (через len()) определяться (т.е. число симолов, а не байт).

В третьем строк без явноуказанной кодировки просто не существует - там такое называется байтовый массив и с ним мало что можно сделать (функционал сильно урезан по сравнению со строчным типом).

А строка с объявленной кодировкой обрабатывается по-символьно, а не по-байтно (это утверждение верно и для второго и для третьего питона).
« Последнее редактирование: 23 Марта 2015, 14:28:40 от Sly_tom_cat »
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн alsoijw

  • Старожил
  • *
  • Сообщений: 4062
  • Fedora 25 GNOME 3 amd64
    • Просмотр профиля
Re: Питон и кодировка
« Ответ #14 : 23 Марта 2015, 15:04:48 »
Sly_tom_cat, а как это явно сделать?
Мало видеть нам начало - надо видеть и конец. Если видишь ты создание - значит где-то есть ТВОРЕЦ
Многие жалуются: геометрия в жизни не пригодилась. Ямб от хорея им приходится отличать ежедневно?

 

Страница сгенерирована за 0.016 секунд. Запросов: 20.