Форум сайта python.su
Знаю, что тем про это достаточно на форуме, прочитал все, в основном встречается ситуация когда некий список/переменная etc просто не записывается в файл, тут другая проблема чуть-чуть. Все записывается и прекрасно, но при открытии файла натыкаюсь на это:
S'\xef\xf0\xe8\xe2\xe5\xf2'
p0
.S'\xe5'
p0
.S'\xfd'
p0
.S'\xef\xf0\xe8\xe2\xfd\xf2'
p0
.S'\xef\xf0\xe8\xe2\xe5\xf2'
p0
.S'\xef\xf0\xe8\xe2\xe5\xf2'
p0
.S'\xef\xee\xea\xe0'
p0
.S'\xef\xee\xea\xe0'
p0
.
pismo=str(raw_input("Введите текст:"))
pickle.dump(pismo,log)
Офлайн
Оригинальное решение - использовать pickle для логирования - и жаловаться на плохо читаемый результат :) Я был просто поражен до глубины души :)
pickle - для сериализации/десериализации. И ни для чего больше. Формат стоит рассматривать как черный ящик - работает, и ладно.
То, что тебе было нужно: log.write('\n'.join(report)).
Вырезка из хелпа: writelines() does not add line separators. Поэтому переводы строк вставляются вручную.
Отредактировано (Июль 4, 2008 21:38:48)
Офлайн
1. writelines не пишет переносов строк в файл, об этом ты должен позаботиться сам: "report = ". Или:
for line in report: print>>log, line # не будет работать в Python 3, можно заменить на log.write(line + '\n')
Офлайн
Спасибо, что просвятили касательно pickle, щас понимаю что это было глупо) но к сожалению там, где я это нашел было сказано, что это подходит для импортирования строк в файл.
Но проблема не только в переходе на следующую строчку, но в основном, в том что он убирает и пробелы тоже. Допустим есть список , вот первый элемент он пишет в файле как “солнцесветит”, хотя требуется чтобы он в файле написал “солнце светит”, а потом перескочил на новую строку. То есть я не могу вставить в середину элемента 0го индекса пробел.
Попробовал перевести все в строку, и разбить string.split() чтобы потом после каждого элемента ставить пробел, а в конце переход на другую строчку
Получилось вот что:
report.append(pismo)
z=repr(report)
z=string.split(z)
for i in range(1,len(z)):
log.write(z[i]+" ")
Отредактировано (Июль 4, 2008 22:43:47)
Офлайн
приведи код полнлстью.
подозреваю что там какой-то мудреж с кодировками.
Офлайн
#-*- coding: cp1251 -*-
import string
import os
t,z=0,0
log=open(“logfile.txt”,“ab”)
report=
while t!=1:
pismo=str(raw_input(“Введите текст:”))
report.append(pismo)
z=repr(report)
z=string.split(z)
for i in range(0,len(z)):
log.write(z)
what_replace=str(raw_input(“Какую букву(сочетание) хотите заменить?:”))
where_replace=str(raw_input(“На что заменить?:”))
result=string.replace(pismo,what_replace,where_replace)
print (“Результат замены:”),result
question=str(raw_input(“введите Y - если хотите продолжить, Все что угодно - нет:”))
question=string.lower(question)
if question==“y”:
continue
else:
break
log.close()
raw_input()
Вот программы полностью, сделана в принципе, только для отработки новых знаний, не более того…
Отредактировано (Июль 4, 2008 23:37:10)
Офлайн
Moonbite2006
z=repr(report)
почему именно repr()? это ведь внутренее представленеие объекта в виде строки. Если в дальнейшем, нужно считывать список из файла, то можно и так его записать, самое простое открытым текстом:
for l in report: ## просто идем по списку, т.к. список итерируем (можно "пересчитывать поэлементно") log.write(l+'\n')
lst = [] f = open('logfile.txt') for i in f: ## файл тоже итерируем. lst.append(i.rstrip()) ## rstrip() - убирает справа пробелы, \n, и т.п.
Офлайн
Andity, спасибо большое, все работает как надо. Только все равно не понятна причина появления этих иероглифоф, как в файле, так и на экране, а не понимая природы, сложно что то исправлять… ну ладно, будем думать…
Офлайн