Создайте файл, если он не существует

Мне нужна помощь с Python. Я пытаюсь открыть файл, и если файл не существует, мне нужно его создать и открыть для записи. У меня это до сих пор:

#open file for reading
fn = input("Enter file to open: ")
fh = open(fn,'r')
# if file does not exist, create it
if (!fh) 
fh = open ( fh, "w")

В сообщении об ошибке говорится о проблеме в строке if(!fh). Можно ли использовать exist как в Perl?

Ответы

Ответ 1

Если вам не нужна атомарность, вы можете использовать модуль os:

import os

if not os.path.exists('/tmp/test'):
    os.mknod('/tmp/test')

UPDATE:

Как упоминал Кори Кляйн, в Mac OS для использования os.mknod() вам необходимы права root, поэтому если вы являетесь пользователем Mac OS, вы можете использовать open() вместо os.mknod()

import os

if not os.path.exists('/tmp/test'):
    with open('/tmp/test', 'w'): pass

Ответ 2

Ну, во-первых, в Python нет оператора !, который был бы not. Но open тоже не пошатнется - это вызовет исключение. И блоки должны быть отступом правильно - Python использует пробелы, чтобы указать блокировку блока.

Таким образом, получаем:

fn = input('Enter file name: ')
try:
    file = open(fn, 'r')
except IOError:
    file = open(fn, 'w')

Ответ 3

'''
w  write mode
r  read mode
a  append mode

w+  create file if it does not exist and open it in (over)write mode
    [it overwrites the file if it already exists]
r+  open an existing file in read+write mode
a+  create file if it does not exist and open it in append mode
'''

пример:

file_name = 'my_file.txt'
f = open(file_name, 'a+')  # open file in append mode
f.write('python rules')
f.close()

Надеюсь, это поможет. [FYI использую версию Python 3.6.2]

Ответ 4

Использование input() подразумевает Python 3, последние версии Python 3 сделали исключение IOError устаревшим (теперь он является псевдонимом для OSError). Предположим, вы используете Python 3.3 или новее:

fn = input('Enter file name: ')
try:
    file = open(fn, 'r')
except FileNotFoundError:
    file = open(fn, 'w')

Ответ 5

Я думаю, что это должно сработать:

#open file for reading
fn = input("Enter file to open: ")
try:
    fh = open(fn,'r')
except:
# if file does not exist, create it
    fh = open(fn,'w')

Кроме того, вы неправильно написали fh = open ( fh, "w"), когда файл, который вы хотели открыть, был fn

Ответ 6

Имейте в виду, что при каждом открытии файла этим методом старые данные в файле уничтожаются независимо от "w+" или просто "w".

import os

with open("file.txt", 'w+') as f:
    f.write("file is opened for business")

Ответ 7

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

Тем не менее, вы можете сделать это, как этот случайный скраб, предложенный, используя try:... кроме:. На самом деле это предложенный способ, согласно девизу python: "Легче просить прощения, кроме разрешения".

Но вы также можете легко проверить наличие:

import os
# open file for reading
fn = raw_input("Enter file to open: ")
if os.path.exists(fn):
    fh = open(fn, "r")
else:
    fh = open(fn, "w")

Примечание: используйте raw_input() вместо input(), потому что input() попытается выполнить введенный текст. Если вы случайно хотите протестировать файл "import", вы получите SyntaxError.

Ответ 8

fn = input("Enter file to open: ")
try:
    fh = open(fn, "r")
except:
    fh = open(fn, "w")

успех