2016-07-06 3 views
0

Я не могу понять, как создать файл, который не существует. Я пробовал следовать, но я получаю ошибку, что файл не существует.Python не создает файл, если он не существует

Просим руководствоваться.

f=open('c:\Lets_Create_Malware\output.txt', 'r+') 

f=open('c:\Lets_Create_Malware\output.txt', 'w+') 

f=open('c:\Lets_Create_Malware\output.txt', 'a+') 

f=open('c:\Lets_Create_Malware\output.txt', 'r') 

f=open('c:\Lets_Create_Malware\output.txt', 'w') 

f=open('c:\Lets_Create_Malware\output.txt', 'a') 
+0

Возможный дубликат [Open in Python не создает файл, если он не существует] (http://stackoverflow.com/questions/2967194/open-in-python-does-not-create-a-file -if-it-doesnt-exist) – paisanco

+0

http://stackoverflow.com/questions/16333569/mixed-slashes-with-os-path-join-on-windows – dmitryro

ответ

1

Используйте двойную обратную косую черту:

f=open('c:\\Lets_Create_Malware\\output.txt', 'w+') 

От docs:

обратной косой (\) используется символ, чтобы избежать символов, которые в противном случае имеют особое значение, например, перевод строки , обратная косая черта или символ кавычки.

1

Учитывая точные пути вы specificed, по крайней мере, некоторые из ваших примеров следовал бы работал (если c:\Lets_Create_Malware путь не существует, что бы добавить к путанице, вызывая все тестовые случаи на провал).

Обратные косые не являются проблемой здесь приведены ваши примеры, потому что символы модифицируется не специальные:

f=open('c:\Lets_Create_Malware\output.txt', 'w')

работает, потому что \ L и \ о не имеют особое значение и поэтому используются буквально (и флаги «w» и «a» создадут файл, если он еще не присутствует).

Однако другой путь:

f=open('c:\Lets_Create_Malware\badname.txt', 'w')

потерпит неудачу:

IOError: [Errno 22] invalid mode ('w') or filename: 'c:\\Lets_Create_Malware\x08adname.txt'

потому что \b часть этого файла переводится как колокол символ (Ctrl-B или \ x08).

Есть два способа избежать этой проблемы: либо предшествуют строку с исходным модификатором строки r (например, r'foo\bar') или убедиться, что каждый обратный слэш экранирован (\\). Для этой цели предпочтительно использовать os.path.join() от модуля os.path.