Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 4, 2015 17:05:28

domogarov
Зарегистрирован: 2015-11-04
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Режим доступа к файлу

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

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+' - всё что надо, но указатель стоит в конце файла, а не в начале.

Офлайн

#2 Ноя. 4, 2015 17:26:39

J.R.
Зарегистрирован: 2015-07-18
Сообщения: 147
Репутация: +  16  -
Профиль  

Режим доступа к файлу

.

Отредактировано J.R. (Янв. 27, 2016 08:33:49)

Офлайн

#3 Ноя. 4, 2015 18:03:24

domogarov
Зарегистрирован: 2015-11-04
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Режим доступа к файлу

J.R.
А какая разница? Что после этого вы напишете?

if os.path.exists('hello.py'):
    f = open('hello.py', 'rb')
    a = pickle.load(...)
else:
    f = open('hello.py','wb')
    pickle.dump(...)

Чем этот код лучше моего? Да и вопрос был в другом.

Офлайн

#4 Ноя. 4, 2015 18:12:23

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Режим доступа к файлу

f.seek(…

Офлайн

#5 Ноя. 4, 2015 18:28:36

domogarov
Зарегистрирован: 2015-11-04
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Режим доступа к файлу

Shaman
т.е. такого режима нет?

Офлайн

#6 Ноя. 4, 2015 18:33:06

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Режим доступа к файлу

Есть, но начальное положение курсора платформозависимо.

Офлайн

#7 Ноя. 4, 2015 19:00:03

domogarov
Зарегистрирован: 2015-11-04
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Режим доступа к файлу

Shaman
Ясно. Спасибо.

Офлайн

#8 Ноя. 4, 2015 22:41:45

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Режим доступа к файлу

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)

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

Согласен что могут быть ситуации когда два открытия файла критически повлияет на быстродействие тогда надо делать по другому.



Отредактировано doza_and (Ноя. 4, 2015 22:46:48)

Офлайн

#9 Ноя. 5, 2015 01:07:29

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10031
Репутация: +  857  -
Профиль   Отправить e-mail  

Режим доступа к файлу

Shaman
Есть, но начальное положение курсора платформозависимо.
Чего платформозависимо?



Офлайн

#10 Ноя. 5, 2015 02:04:19

domogarov
Зарегистрирован: 2015-11-04
Сообщения: 5
Репутация: +  0  -
Профиль   Отправить e-mail  

Режим доступа к файлу

doza_and
Потому что странный вроде режим.

Спорить не буду, но по-моему не страннее, чем ‘ab+’

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version