Найти - Пользователи
Полная версия: Режим доступа к файлу
Начало » Python для новичков » Режим доступа к файлу
1 2
domogarov
Добрый день.
Необходимо открыть бинарный файл для чтения, а если такого нет, то создать его и записать в него информацию. Я понимаю, что можно сделать конструкцию вида:

try:
    f = open('test.bin', 'rb')
    a = pickle.load(...)
except:
    f = open('test.bin','wb')
    pickle.dump(...)

А можно ли обойтись одним open(), чтобы было вроде:
f = open('test.ttt', 'какой-то режим')
try:
    a = pickle.load(...)
except:
    pickle.dump(...)

'rb+' - открывает для чтения/записи, но не создает файл.
'wb+' - создает файл, если его нет, открывает для чтения/записи, но перезаписывает его (данные теряются).
'ab+' - всё что надо, но указатель стоит в конце файла, а не в начале.
J.R.
.
domogarov
J.R.
А какая разница? Что после этого вы напишете?
if os.path.exists('hello.py'):
    f = open('hello.py', 'rb')
    a = pickle.load(...)
else:
    f = open('hello.py','wb')
    pickle.dump(...)

Чем этот код лучше моего? Да и вопрос был в другом.
Shaman
f.seek(…
domogarov
Shaman
т.е. такого режима нет?
Shaman
Есть, но начальное положение курсора платформозависимо.
domogarov
Shaman
Ясно. Спасибо.
doza_and
domogarov
т.е. такого режима нет?
Потому что странный вроде режим. Если вы в этот момент можете записать файл то зачем его читать?

Я так понимаю это может быть состояние программы при рестарте. А запись это запись значений по умолчанию. но у меня обычно получается что запись отделена от чтения.

if os.path.exists("some"):
   with open("some","rb") as f:
        data=pickle.load(f)
   # прочитали и тутже закрыли
else:
   data=create_default_data() # писать в этот момент нет никакого смысла - вы и так все легко по умолчанию выставите сами
# тут огромная куча кода
.....
# и только потом пишем когда получен результат.
with open("some","wb") as f:
     pickle.dump(f,data,2)

Более того, хороший тон, когда для всего времени жизни программы файл всегда только вход или только выход. Но не то и другое одновременно.

Согласен что могут быть ситуации когда два открытия файла критически повлияет на быстродействие тогда надо делать по другому.
py.user.next
Shaman
Есть, но начальное положение курсора платформозависимо.
Чего платформозависимо?
domogarov
doza_and
Потому что странный вроде режим.

Спорить не буду, но по-моему не страннее, чем ‘ab+’
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