Создайте файл, если он не существует
Мне нужна помощь с 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")
успех