Найти - Пользователи
Полная версия: Хорошо-ли так работать с файлами?
Начало » Python для новичков » Хорошо-ли так работать с файлами?
1 2
Kravejs
Файл А - это шаблон с %s. На сколько плохо не закрывать файлы?

a = “…”
b = “…”

open('B.xml','w').write(open('A.xml','r').read() % (a, b))
Ferroman
Я думаю, что так писать в принципе нехорошо.
Код абсолютно нечитабельный.
shiza
Предполагаю так:
Переменные не создаются и объекты файлов будут удалены, после выполнения. А перед этим файлы будут автоматом закрыты. Поэтому нормально.

Ferroman
Я думаю, что так писать в принципе нехорошо.
Код абсолютно нечитабельный.
А по моему, красиво. Только пробелов поставить, чтоб зрительно отделить операции. %)
Плохо тут имхо, что в случае возникновения исключения, его трудно будет обработать (сразу так и не поймешь - какой именно файл его вызвал).
evgenyl
вот интересная статья о том как хорошо и как плохо
http://www.fantascienza.net/leonardo/ar/python_best_practices.html
Kravejs
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
Если не хочется плодить новые сущности можно по-другому.
Я бы скорее сделал или как Kravejs, или, как минимум, вот так:
open('B.xml','w').\  
write(open('A.xml','r').\
read() % (a, b))
Хотя так мне тоже не очень нравится.
cybergrind
@Ferroman: хез что называть читабельным, я такой код вполне нормально читаю, правда так не попишешь если ты читаешь из файла. но вообще понимать под нечитабельностью.
@Kravejs: имхо, если Вам достаточно хорошо читаеться первый код - то можно так и оставить (т.к. такие места бывает довольно часто приходиться использовать, всм открытие файла, для того что бы сразу записать и закрывать). но если одной строкой неудобно читаеться, то последний способо, предложенный Ferroman'ом тоже вполне ничего, и даже более читабелен. А писать кучу совершенно ненужного кода, только что бы читалось совсем уж легко….. ну хез, может лучше задокументировать, а то уж чтото совсем по жавовски получаеться.
ZAN
Ну а для чего with создан, чесслова?
with open("A.txt") as in:
with open('B.txt', 'w') as out:
out.write(in.read() %(a, b))
Ferroman
Да, так лучше - можно прокомментировать код построчно (чего нельзя в моём примере), и не надо плодить переменных.
cybergrind
ага… вот только надо добавлять что в 2.3 этого нету =)
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