Как я создаю файл в Python, не перезаписывая существующий файл

Поверхность Шрифта статьи в IE: Создание веб-Работы Шрифтов говорит, что работает со всеми тремя главными браузерами.

Вот образец, я получил работу: http://brendanjerwin.com/test_font.html

[еще 117] обсуждение находится в Шрифты Встраивания .

20
задан boatcoder 28 August 2009 в 16:14
поделиться

3 ответа

Use os.open() with os.O_CREAT and os.O_EXCL to create the file. That will fail if the file already exists:

>>> fd = os.open("x", os.O_WRONLY | os.O_CREAT | os.O_EXCL)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OSError: [Errno 17] File exists: 'x'

Once you've created a new file, use os.fdopen() to turn the handle into a standard Python file object:

>>> fd = os.open("y", os.O_WRONLY | os.O_CREAT | os.O_EXCL)
>>> f = os.fdopen(fd, "w")  # f is now a standard Python file object

Edit: From Python 3.3, the builtin open() has an x mode that means "open for exclusive creation, failing if the file already exists".

37
ответ дан 29 November 2019 в 23:37
поделиться

Если у вас есть идентификатор , связанный с каждым потоком / процессом, который пытается создать файл, вы можете поместить этот идентификатор в какой-нибудь суффикс, тем самым гарантируя, что нет двух процессов может использовать одно и то же имя файла.

Это устраняет состояние гонки между процессами.

0
ответ дан 29 November 2019 в 23:37
поделиться

Если вас беспокоит состояние гонки, вы можете создать временный файл , а затем переименовать его.

>>> import os
>>> import tempfile
>>> f = tempfile.NamedTemporaryFile(delete=False)
>>> f.name
'c:\\users\\hughdb~1\\appdata\\local\\temp\\tmpsmdl53'
>>> f.write("Hello world")
>>> f.close()
>>> os.rename(f.name, r'C:\foo.txt')
>>> if os.path.exists(r'C:\foo.txt') :
...     print 'File exists'
...
File exists

В качестве альтернативы вы можете создать файлы с помощью ] uuid в имени. Stackoverflow элемент на этом.

>>> import uuid
>>> str(uuid.uuid1())
'64362370-93ef-11de-bf06-0023ae0b04b8'
7
ответ дан 29 November 2019 в 23:37
поделиться
Другие вопросы по тегам:

Похожие вопросы: