Я хотел бы создать файл с пустым x
с помощью python. Я использовал os.system(y)
где y = 'touch %s' % (x)
. Я искал версию без каталогов os.mkdir
, но я ничего не смог найти. Есть ли такой инструмент для создания файла без его открытия или с использованием системного или всплывающего/подпроцесса?Создать пустой файл с помощью python
ответ
Там нет никакого способа, чтобы создать файл, не открывая его
Существует os.mknod("newfile.txt")
(но это требует привилегий суперпользователя на OSX). Системный вызов для создания файла на самом деле open()
с флагом O_CREAT
. Поэтому независимо от того, вы всегда будете открывать файл.
Так самый простой способ, чтобы просто создать файл без усечения его в случае, если она существует такой:
open(x, 'a').close()
На самом деле вы можете опустить .close()
поскольку refcounting ГХ CPython закроются сразу после open()
заявления завершено - но это чище сделать это явно, и полагаться на поведение, специфичное для CPython, тоже не очень хорошо.
В случае, если вы хотите поведение touch
«s (т.е. обновить время изменения в случае существует файл):
import os
def touch(path):
with open(path, 'a'):
os.utime(path, None)
Вы можете расширить это также создавать каталоги в пути, которые не существуют:
basedir = os.path.dirname(path)
if not os.path.exists(basedir):
os.makedirs(basedir)
Выглядит хорошо ... «Усекать» по существу «ясно», правильно? – tkbx
Да, открытие файла с флагом 'w' (write) опустошает его при открытии его с помощью' a' (append). – ThiefMaster
Нельзя полагаться на подтверждение немедленного закрытия файла. Это не вопрос чистоты, так как пересчет - это всего лишь деталь реализации. Никакой Python, кроме CPython, не делает этого. Хотите сделать свою программу в пять раз быстрее с PyPy или запустить ее в среде Java/.NET с помощью Jython/IronPython? Слишком плохо, что вы не закрывали эти файлы, теперь ваша программа течет, как сито;) Это особенно ужасно с 2.5, так как 'with' позволяет * легко * закрыть файл своевременно (и даже перед исключениями и круговыми ссылками) ** и ** код становится более понятным для загрузки. – delnan
Конечно, существует способ создания файлов без открытия. Это так же просто, как позвонить os.mknod("newfile.txt")
. Единственным недостатком является то, что для этого вызова требуются привилегии root в OSX.
Отличная точка. См. Также https://docs.python.org/3/library/os.html – poolie
- 1. Создать пустой HTML-файл с помощью Python?
- 2. Python создать пустой файл - Unix
- 3. Как создать пустой файл с помощью Ansible?
- 4. Создать пустой текстовый файл
- 5. PHPExcel Writer создать пустой файл
- 6. python, записывающий пустой файл
- 7. Создать XML-файл с помощью python?
- 8. Создать файл без перезаписи с помощью python?
- 9. создать файл в скрипте с помощью python
- 10. Как создать файл kgring с помощью python?
- 11. Как создать файл .rar с помощью python?
- 12. пытается создать файл .arff с помощью python
- 13. Создать файл слов (.doc) с помощью python
- 14. Python писать в файл, создавая пустой файл
- 15. создать новый файл формы в arcmap с помощью python
- 16. Как создать пустой файл .mat с терминала?
- 17. создать PDF-файл с помощью django с помощью python 3
- 18. Python пишет пустой файл json
- 19. Как создать пустой файл в emacs?
- 20. Python logging Как я могу создать пустой файл журнала?
- 21. Как создать пустой ModernWindow с помощью ModernUI?
- 22. Python запись в файл возвращает пустой файл
- 23. Создать пустой файл с запросом, если файл уже существует?
- 24. Пустой файл FileUpload с помощью Javascript
- 25. пустой файл при загрузке с помощью SSH.NET
- 26. Пустой файл, возвращенный с помощью Ajax PHP
- 27. Пустой файл журнала Android с помощью FileHandler()
- 28. Как создать файл с ивритским именем с помощью python 2.7?
- 29. Файл всегда загружен пустой в Python, Django
- 30. Как создать пустой CSV-файл в определенной папке?
Почему открытие плохое? –
@LevLevitsky, потому что мне придется закрыть его снова: P. Мне нужно создать тысячи файлов, и прикосновение к файлу кажется более чистым. – tkbx
FYI, при использовании внешней команды для этого всегда плохо, правильным способом выполнить его будет 'subprocess.call (['touch', x])' – ThiefMaster