Проблема с созданием файла из библиотеки pathlib
При создании файла :
from pathlib import Path
file_path = Path.home() / "employees.csv"
file = file_path.open(mode ="r", encoding ="utf-8", newline = "")
reader = csv.DictReader(file)
вылезает вот такая ошибка:
Traceback (most recent call last):
File "C:/Users/Виктор/Desktop/python/shitty 12.6 dict.py", line 4, in <module>
file = file_path.open(mode ="r", encoding ="utf-8", newline = "")
File "C:\Users\Виктор\AppData\Local\Programs\Python\Python312\Lib\pathlib.py", line 1013, in open
return io.open(self, mode, buffering, encoding, errors, newline)
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\Виктор\\employees.csv'
но если я создаю файл таким способом :
from pathlib import Path
file_path = Path.home() / "employees.csv"
file_path.touch()
все работает . Помогите разобраться почему первый вариант не работает .
Ответы (3 шт):
Режим mode ="r"
не создаёт файл, а только открывает. А поскольку файла по указанному пути нет, то и выходит соответствующая ошибка.
В ошибке всё понятно написано FileNotFoundError
(Файл не найден), с помощью touch()
, как написано тут, вы создаёте файл после чего он запросто находиться. Да и к тому же при открытии файла с mode ="r"
подразумевается что файл уже существует и в нём есть данные для чтения.
Когда сообщение об ошибке говорит, что нет такого файла, тогда нет.
У вас нет такого файла. Точка.
Ваша вторая попытка, именно file_path.touch()
делает что-то другое:
когда файл уже существует (это не ваш случай), его время модификации изменится на текущее (английское слово «touch» значит «коснуться»),
когда файл не существует (ваш случай), он создастся (как новый пустой файл).
Примечание:
Значит, когда после второй попытки вы повторите первую, т.е. после file_path.touch()
выполнится команда
file = file_path.open(mode="r", encoding="utf-8", newline="")
файл уже будет существовать и потому ошибка уже не повторится.