Найти - Пользователи
Полная версия: Проблемы с кодировкой в текстовом файле
Начало » Python для новичков » Проблемы с кодировкой в текстовом файле
1 2 3 4
xs13
Делаю так:

file=codecs.open( "data.txt", "r", "cp1251" )  # открываем файл data.txt на чтение
u = file.readlines() # считываем строками в переменную u
for i in u[0:]:
i[2:] = [] # оставляем только 1 и 2 элементы каждой строки, отсекаем все, что дальше
list.insert(0,i) # Отображаем содержимое переменной в окне списка
В итоге имеем ошибку:
'unicode' object doesn't support item assignment

как изменить код, чтобы в окне отображались первые два слова из каждой строки? Что я делаю не правильно?
Viper
1. i - это не первые 2 слова, а первые 2 символа,
2. i - это юникод строка, а строки в питоне обьекты неизменяемые, про что тебе интерпритатор и говорит в ошибке,
3. list.insert(0,i) - использовать зарезервированные слова в качестве имён переменных плохая практика.
xs13
Viper
2. i - это юникод строка, а строки в питоне обьекты неизменяемые, про что тебе интерпритатор и говорит в ошибке,
хорошо, это я понимаю
как мне из строки сделать список слов?
Viper
Читать документацию: 6.6.1. String Methods
pyuser
lst = [x.strip().split()[:2] for x in file("data.txt", "rb")]
xs13
pyuser
lst = [x.strip().split()[:2] for x in file("data.txt", "rb")]
и получается все точно также как в моем первом посте:

[]

сейчас буду дальше думать
ZZZ
Я тут на днях на Ocaml зажигал… :-)

f = '''
qw er ty
wq re
qw
'''

split = lambda s: filter(None, s.split())

print [\
'' if len(split(s)) == 0 \
else ' '.join(split(s)) if len(split(s)) == 1 \
else ' '.join(split(s)[:2]) if len(split(s)) >= 2 \
else '' \
for s in f.split('\n')]
xs13
ZZZ
Я тут на днях на Ocaml зажигал… :-)

f = '''
qw er ty
wq re
qw
'''

split = lambda s: filter(None, s.split())

print [\
'' if len(split(s)) == 0 \
else ' '.join(split(s)) if len(split(s)) == 1 \
else ' '.join(split(s)[:2]) if len(split(s)) >= 2 \
else '' \
for s in f.split('\n')]
Извини, но ничего не понял.
Выдает name f is not defined
pyuser
xs13
и получается все точно также как в моем первом посте:
[]
сейчас буду дальше думать
Это совершенно нормально :) Где-то здесь совсем недавно поднималась тема о печати списков и в ней Андрей Светлов очень доходчиво объяснил, почему получается именно так, а не иначе.
попробуйте:
lst = [x.strip().split()[:2] for x in file("data.txt", "rb")]
for l in lst :
print(l[0], l[1])
и Вы увидите нормальный текст.
sypper-pit
pyuser
Код
симпотично )))
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB