Kravejs
Июль 28, 2008 00:13:00
Файл А - это шаблон с %s. На сколько плохо не закрывать файлы?
a = “…”
b = “…”
open('B.xml','w').write(open('A.xml','r').read() % (a, b))
Ferroman
Июль 28, 2008 01:42:24
Я думаю, что так писать в принципе нехорошо.
Код абсолютно нечитабельный.
shiza
Июль 28, 2008 05:06:38
Предполагаю так:
Переменные не создаются и объекты файлов будут удалены, после выполнения. А перед этим файлы будут автоматом закрыты. Поэтому нормально.
Ferroman
Я думаю, что так писать в принципе нехорошо.
Код абсолютно нечитабельный.
А по моему, красиво. Только пробелов поставить, чтоб зрительно отделить операции. %)
Плохо тут имхо, что в случае возникновения исключения, его трудно будет обработать (сразу так и не поймешь - какой именно файл его вызвал).
evgenyl
Июль 28, 2008 07:52:16
Kravejs
Июль 28, 2008 08:17:13
Kravejs
Файл А - это шаблон с %s. На сколько плохо не закрывать файлы?
a = “…”
b = “…”
open('B.xml','w').write(open('A.xml','r').read() % (a, b))
Можно и так:
template = open('A.xml','r').read()
out_file = template % (a, b)
open('B.xml','w').write(out_file)
Здесь мы создаём две лишних переменных, но имеем возможность точнее отловить ошибку.
Хотя для меня достаточно понять что что-то не так с обработкой шаблона.
Ferroman
Июль 28, 2008 11:55:42
Если не хочется плодить новые сущности можно по-другому.
Я бы скорее сделал или как Kravejs, или, как минимум, вот так:
open('B.xml','w').\
write(open('A.xml','r').\
read() % (a, b))
Хотя так мне тоже не очень нравится.
cybergrind
Июль 28, 2008 14:12:04
@Ferroman: хез что называть читабельным, я такой код вполне нормально читаю, правда так не попишешь если ты читаешь из файла. но вообще понимать под нечитабельностью.
@Kravejs: имхо, если Вам достаточно хорошо читаеться первый код - то можно так и оставить (т.к. такие места бывает довольно часто приходиться использовать, всм открытие файла, для того что бы сразу записать и закрывать). но если одной строкой неудобно читаеться, то последний способо, предложенный Ferroman'ом тоже вполне ничего, и даже более читабелен. А писать кучу совершенно ненужного кода, только что бы читалось совсем уж легко….. ну хез, может лучше задокументировать, а то уж чтото совсем по жавовски получаеться.
ZAN
Июль 28, 2008 14:43:34
Ну а для чего with создан, чесслова?
with open("A.txt") as in:
with open('B.txt', 'w') as out:
out.write(in.read() %(a, b))
Ferroman
Июль 28, 2008 14:47:27
Да, так лучше - можно прокомментировать код построчно (чего нельзя в моём примере), и не надо плодить переменных.
cybergrind
Июль 28, 2008 15:21:22
ага… вот только надо добавлять что в 2.3 этого нету =)