#python #file #writing
#python
Вопрос:
Я пытаюсь записать некоторые данные в файл, но у меня возникли некоторые проблемы с используемым мной путем.
Это мой код:
my_path = r'c:dataXYMDesktopMyFolder 7-sep'
with open(my_path '\' 'Vehicles_MM' '\' name_vehicile '-AB.txt', 'w') as output:
writer = csv.writer(output, delimiter = 't')
writer.writerow(headers)
writer.writerow(data)
for vehicle_loc_list in vehicle_loc_dict.values():
for record_group in group_records(vehicle_loc_list):
writer.writerow(output_record(record_group))
Это ошибка, которую я получаю:
FileNotFoundError: [Errno 2] No such file or directory: 'c:\data\XYM\Desktop\MyFolder 7-sep\Vehicles_MM\20200907-AB.txt'
Комментарии:
1. Если
Vehicles_MM
каталог не существует, вы должны создать его, прежде чем сможете создавать в нем новые файлы.2. @tripleee
Vehicles_MM
— это строка, а не каталог3. Либо вы неправильно поняли мой комментарий, либо неправильно поняли свой собственный код.
open(my_path '\' 'Vehicles_MM' '\' name_vehicile '-AB.txt', 'w')
явно пытается создать файл в подкаталогеmy_path
a, имя которогоVehicles_MM
.
Ответ №1:
Основываясь на откровениях в комментариях, проблема в том, что вы пытаетесь выполнить запись в подкаталог c:dataXYMDesktopMyFolder 7-sepVehicle_MM
, который не существует, и в который на самом деле вы не хотите записывать.
Исправление заключается в удалении разделителя каталогов \
; возможно, вместо этого используйте другой разделитель. Например,
with open(my_path '\' 'Vehicles_MM-' name_vehicile '-AB.txt', 'w') as output:
Если вы действительно хотите выполнить запись в этот подкаталог, вы должны убедиться, что он существует, прежде чем пытаться открыть файл внутри него.
os.makedirs(my_path '\' 'Vehicles_MM', exist_ok=True)
with open(...
То же самое несколько более читаемо с pathlib.Path
;
from pathlib import Path
my_path = Path(r'c:dataXYMDesktopMyFolder 7-sep')
vehicles_mm = my_path / 'Vehicles_MM'
vehicles_mm.mkdir(parents=True, exist_ok=True)
filename = vehicles_m / name_vehicile '-AB.txt'
with filename.open('w') as output:
...
Ответ №2:
Вы должны использовать один из встроенных модулей для работы с путями. Либо os.path
или pathlib.Path
# with os.path:
import os.path as p
filename = p.join(my_path, "Vehicles_MM", name_vehicle "-AB.txt")
assert p.exists(p.dirname(filename))
# with pathlib.Path:
from pathlib import Path
my_path = Path("c:dataXYMDesktopMyFolder 7-sep")
filename = my_path.joinpath("Vehicles_MM", name_vehicle "-AB.txt")
assert filename.parent.exists()
Комментарии:
1. @qmuees, это не имеет ничего общего с записью. Я прав?
2. нет, это связано со способом форматирования путей и тем фактом, что python не создаст каталог, если он не был найден в файловой системе
3. Не следует
w
ли автоматически создавать файл, если этот файл не существует?4. Да, но не в родительскую папку
5. Я хочу сказать: ваш путь, вероятно, отформатирован неправильно. Ошибка сообщает вам, что папка не найдена. Я предполагаю, что папка существует, но она отформатирована неправильно. Если папка не существует, ее необходимо создать.