Уведомления

Группа в Telegram: @pythonsu

#1 Май 5, 2016 09:55:44

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Исключение if для комментария '''комментарий'''

Niccolum
Однако, если он читает комментарии, то выводится левые символы (видимо другая кодировка) Соответственно можно как сделать так, чтобы комментарии открывало в читабельной (вроде ASHII) кодировке или не открывало вообще?
Надо указать кодировку при открытии файла.



Офлайн

#2 Май 5, 2016 11:42:26

Niccolum
Зарегистрирован: 2016-04-26
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Исключение if для комментария '''комментарий'''

doza_and
В питоне тройные кавычки это не комментарций а многострочный строковый литерал, посему его тоже надо нумеровать. Комментарии начинаются с # и их тоже обычно надо нумеровать. Можно на русском языке озвучить постановку задачи, которую вы решаете приведенным кодом?
Да. Я хочу данным тренировочным кодом считывать порядковый номер строки, количество символов через пробел и саму строку. Однако при открытии данного файла возникает ошибка, которая, как я понял, касается кодировки, ибо когда я запускаю данный скрипт на питоне 3.4 появляется такая проблема.
0 => 4 :: ‘'’

1 => 101 :: Для запуска необходимо выполнить импорт (import CountLinesChars2)

2 => 132 :: и запуск функции с полным именем .py в кавычках (CountLinesChars2.count('CountLinesChars2.py'))

3 => 4 :: ‘'’

4 => 17 :: def count(name):

5 => 19 :: file = open(name)

6 => 91 ::
Соответственно как её решить? Либо не читать первые строки , начинающиеся с тройных одинарных или двойных кавычек, либо читать “по русски”

Офлайн

#3 Май 5, 2016 18:52:56

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

Исключение if для комментария '''комментарий'''

Niccolum, по-русски.

# -*- coding: utf-8 -*-
f = open('niccolu')
strok=sum(1 for l in open('niccolu'))
#print(strok)
i=0
while i < strok:
    for line in f.readlines():
        i=i+1
        print (i," > ",line)

1  >  :: ‘'’

2 >

3 > :: Привет‚ (import CountLinesChars2)

4 >

5 > :: Пока (CountLinesChars2.count('CountLinesChars2.py'))

6 >

7 > :: ‘'’

8 >

9 > :: def count(name):

10 >

11 > :: file = open(name)

12 >

13 > ::

Проблема точно не в кавычках. У вас ось какая?

Офлайн

#4 Май 6, 2016 09:28:24

Niccolum
Зарегистрирован: 2016-04-26
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Исключение if для комментария '''комментарий'''

Kir@
Niccolum, по-русски.
Как я понял проблема таки не в коде, а в кодировке, ибо в IDLE в вашем коде выдаёт следующее:
1  >  '''
2  >  Для запуска необходимо выполнить импорт (import CountLinesChars2)
3  >  и запуск функции с полным именем .py в кавычках (CountLinesChars2.count('CountLinesChars2.py'))
4  >  '''
5  >  def count(name):
6  >  	file = open(name)
7  >  	[print(index, '=>' ,len(line), '::', line) for index, line in enumerate(file.readlines())]

Вставил всё до символа, включая utf-8. Не впервые встречаюсь с этой проблемой на рабочей системе (win xp sp3). Не домашняя, на работе. Русские символы отказывается читать, в cmd через chcp только 866 кодировка корректно отображается (ASCII и UTF-8 выводит какую то дичь). Я так полагаю проблема в системе?

Отредактировано Niccolum (Май 6, 2016 09:33:13)

Офлайн

#5 Май 6, 2016 09:34:35

Niccolum
Зарегистрирован: 2016-04-26
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Исключение if для комментария '''комментарий'''

Прикрепляю файл чтобы вы поняли что я имею ввиду.
Мб что вместо utf-8 в первой строке написать? Название ‘866’ кодировки есть?
P.S. если в notepad++ выбрать кодировку файла/кириллица/ОЕМ 866 - русский язык сам превращаетсяв дичь уже в файле.
Попробовал добавить кодировку в файл

# -*- coding: OEM 866 -*-
Однако пишет что encoding problem: with BOM

Есть идеи?

Отредактировано Niccolum (Май 6, 2016 09:46:36)

Прикреплённый файлы:
attachment Точечный рисунок.bmp (647,8 KБ)

Офлайн

#6 Май 6, 2016 09:53:02

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Исключение if для комментария '''комментарий'''

Niccolum
Есть идеи?
Не видишь написано?
В функцию open() надо кодировку передать.



Офлайн

#7 Май 6, 2016 09:53:25

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

Исключение if для комментария '''комментарий'''

Niccolum
Вчерашний вариант я делал под убунтой.

Сегодня под Win7:

1  >  :: ‘'’

2 >

3 > :: Привет‚ (import CountLinesChars2)

4 >

5 > :: Пока (CountLinesChars2.count('CountLinesChars2.py'))

6 >

7 > :: ‘'’

8 >

9 > :: def count(name):

10 >

11 > :: file = open(name)

12 >

13 > ::

Файл свой пересохраните, например, с помощью notepad++.
Или создайте новый файл и вставьте туда весь текст из исходного файла.

Офлайн

#8 Май 6, 2016 12:59:34

Niccolum
Зарегистрирован: 2016-04-26
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Исключение if для комментария '''комментарий'''


Kir@
NiccolumВчерашний вариант я делал под убунтой.Сегодня под Win7:
Пересохранил файл с помощью notepad++
Выглядит так: (CountLinesChars2.py)
# -*- coding: utf-8 -*-
'''
Для запуска необходимо выполнить импорт (import CountLinesChars2)
и запуск функции с полным именем .py в кавычках (CountLinesChars2.count('CountLinesChars2.py'))
'''
def count(name):
	file = open(name)
	[print(index, '=>' ,len(line), '::', line) for index, line in enumerate(file.readlines())]

Второй ваш файл сохранил так (niccolu.py):
# -*- coding: utf-8 -*-
f = open('CountLinesChars2.py')
strok=sum(1 for l in open('CountLinesChars2.py'))
#print(strok)
i=0
while i < strok:
    for line in f.readlines():
        i=i+1
        print (i," > ",line)
Далее запускаю cmd

python /python34/niccolu.py

Пишет во второй строке ошибка.

Напишите что я не так делаю. Понять не могу - кодировку же надо в начало файла вставлять. К тому же utf-8 у меня криво открывается (см вложение)

Почему я не могу запустить только свой файл? меня устраивает как он запускается, только не устраивает кодировка. Зачем, Kir@, предлагаешь использовать второй модуль? Он чуть дополняет первый, но в нём нет смысла, т.к. мой меня устраивает.

Отредактировано Niccolum (Май 6, 2016 13:00:17)

Прикреплённый файлы:
attachment Точечный рисунок.bmp (647,8 KБ)

Офлайн

#9 Май 6, 2016 16:19:21

Kir@
Зарегистрирован: 2015-08-13
Сообщения: 124
Репутация: +  0  -
Профиль   Отправить e-mail  

Исключение if для комментария '''комментарий'''

Niccolum
Вы что “Пересохранили с помощью notepad++”?
Код программы? Или злосчастный txt файл?

Вот так попробуйте:

f = open(u'niccolu')

Офлайн

#10 Май 10, 2016 16:23:50

Niccolum
Зарегистрирован: 2016-04-26
Сообщения: 23
Репутация: +  0  -
Профиль   Отправить e-mail  

Исключение if для комментария '''комментарий'''

В вашем случае попробовал следующее:
#Файл niccoly.py

# -*- coding: utf-8 -*-
f = open(u'niccolu')
strok=sum(1 for l in open(u'niccolu'))
#print(strok)
i=0
while i < strok:
    for line in f.readlines():
        i=i+1
        print (i," > ",line)

Выводит ошибку
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    f = open(u'niccolu')
FileNotFoundError: [Errno 2] No such file or directory: 'niccolu'

Пересохранил в формате .py как питон. Я не настолько дурак чтоб .txt от .py не отличить.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version