open() в Python не создает файл, если он не существует
как лучше всего открыть файл как чтение/запись, если он существует, или если он не существует, а затем создать его и открыть его как чтение/запись? Из того что я читал, file = open('myfile.dat', 'rw') должен делать это, верно?
Он не работает для меня (Python 2.6.2), и мне интересно, является ли это проблемой версии, или не должно работать так или иначе.
суть в том, что мне просто нужно решение проблемы. Мне любопытно, о других вещах, но все что мне нужно это хороший способ, чтобы сделать открытие часть.
UPDATE: вложенный каталог был записан пользователем и группой, а не другим (я нахожусь в системе Linux... Итак, разрешения 775 другими словами), и точная ошибка была:
IOError: нет такого файла или каталога.
16 ответов:
плюс такого подхода заключается в том, что файл закрыт в конце блока, даже если по пути возникает исключение. Это эквивалентно
try-finally, но намного короче.with open("file.dat","a+") as f: f.write(...) ...a+ открывает файл для добавления и чтения. Указатель файла является в конце файла, если файл существует. Файл откроется в окне добавить режим. Если файл не существует, создается новый файл для чтение и письмо. - режимы файлов Python
метода seek () задает текущее положение файла.
f.seek(pos [, (0|1|2)]) pos .. position of the r/w pointer [] .. optionally () .. one of -> 0 .. absolute position 1 .. relative position to current 2 .. relative position from endразрешены только символы "rwab+"; должен быть точно один из "rwa" - см. вопрос переполнения стека Python file modes detail.
>>> import os >>> if os.path.exists("myfile.dat"): ... f = file("myfile.dat", "r+") ... else: ... f = file("myfile.dat", "w")r + означает чтение / запись
хорошей практикой является использование следующего:
import os writepath = 'some/path/to/file.txt' mode = 'a' if os.path.exists(writepath) else 'w' with open(writepath, mode) as f: f.write('Hello, world!\n')
мой ответ:
file_path = 'myfile.dat' try: fp = open(file_path) except IOError: # If not exists, create the file fp = open(file_path, 'w+')
open('myfile.dat', 'a')работает для меня просто отлично.в py3k ваш код вызывает
ValueError:>>> open('myfile.dat', 'rw') Traceback (most recent call last): File "<pyshell#34>", line 1, in <module> open('myfile.dat', 'rw') ValueError: must have exactly one of read/write/append modeв python-2.6 он поднимает
IOError.
Что вы хотите сделать с файлом? Только писать или читать и писать?
'w', ' a ' позволит писать и создаст файл, если он не существует.
Если вам нужно читать из файла, файл должен существовать, прежде чем открыть его. Вы можете проверить его существование перед его открытием или использовать try/except.
поместите w+ для записи файла, усечения, если он существует, r+ для чтения файла, создавая его, если он не существует, но не записывает (и возвращает null) или a+ для создания нового файла или добавления к существующему.
начиная с python 3.4 вы должны использовать
pathlib"прикоснуться" файлов.
Это гораздо более элегантное решение, чем предложенное в этой теме.from pathlib import Path filename = Path('myfile.txt') filename.touch(exist_ok=True) # will create file, if it exists will do nothing file = open(filename)то же самое с каталогами:
filename.mkdir(parents=True, exist_ok=True)
использование:
import os f_loc = r"C:\Users\Russell\Desktop\ip_addr.txt" if not os.path.exists(f_loc): open(f_loc, 'w').close() with open(f_loc) as f: #Do stuffубедитесь, что вы закрываете файлы после их открытия. Элемент
withконтекст менеджер сделает это за вас.
''' w write mode r read mode a append mode w+ create file if it doesn't exist and open it in write mode r+ create file if it doesn't exist and open it in read mode a+ create file if it doesn't exist and open it in append mode '''пример:
file_name = 'my_file.txt' f = open(file_name, 'w+') # open file in write mode f.write('python rules') f.close()Я надеюсь, что это помогает. [К вашему сведению я использую python версии 3.6.2
Если вы хотите открыть его для чтения и записи, я предполагаю, что вы не хотите усекать его при открытии, и вы хотите иметь возможность читать файл сразу после его открытия. Так что это решение я использую:
file = open('myfile.dat', 'a+') file.seek(0, 0)
Итак, вы хотите записывать данные в файл, но только если он еще не существует?.
эта проблема легко решается с помощью малоизвестного режима x для открытия() вместо обычного режима w. Например:
>>> with open('somefile', 'wt') as f: ... f.write('Hello\n') ... >>> with open('somefile', 'xt') as f: ... f.write('Hello\n') ... Traceback (most recent call last): File "<stdin>", line 1, in <module> FileExistsError: [Errno 17] File exists: 'somefile' >>>если файл находится в двоичном режиме, используйте режим xb вместо xt.
import os, platform os.chdir('c:\Users\MS\Desktop') try : file = open("Learn Python.txt","a") print('this file is exist') except: print('this file is not exist') file.write('\n''Hello Ashok') fhead = open('Learn Python.txt') for line in fhead: words = line.split() print(words)
Comments