Проблема с созданием файла из библиотеки 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" не создаёт файл, а только открывает. А поскольку файла по указанному пути нет, то и выходит соответствующая ошибка.

→ Ссылка
Автор решения: kristal

В ошибке всё понятно написано FileNotFoundError(Файл не найден), с помощью touch(), как написано тут, вы создаёте файл после чего он запросто находиться. Да и к тому же при открытии файла с mode ="r" подразумевается что файл уже существует и в нём есть данные для чтения.

→ Ссылка
Автор решения: MarianD

Когда сообщение об ошибке говорит, что нет такого файла, тогда нет.
У вас нет такого файла. Точка.

Ваша вторая попытка, именно file_path.touch() делает что-то другое:

  • когда файл уже существует (это не ваш случай), его время модификации изменится на текущее (английское слово «touch» значит «коснуться»),

  • когда файл не существует (ваш случай), он создастся (как новый пустой файл).


Примечание:

Значит, когда после второй попытки вы повторите первую, т.е. после file_path.touch() выполнится команда

file = file_path.open(mode="r", encoding="utf-8", newline="")

файл уже будет существовать и потому ошибка уже не повторится.

→ Ссылка