Как исправить эту простую ошибку FileNotFound в Python?

Я делаю простой код с модулем Shutil для копирования другого содержимого файла, и у меня возникла ошибка FileNotFound, из-за которой я хочу использовать имя файла вместо того, чтобы каждый раз вставлять путь к файлу. Но что бы я ни делал, мне всегда нужно было вставить путь к файлу, чтобы не получить ошибку.

  1. Я проверил, не совпадают ли имена файлов, но они совпали,
  2. Я попробовал другой файл с расширением .txt и тщательно сопоставил его, но ВСЕ ЕЩЕ выдавал ошибку.
  3. Я попытался использовать файлы Python и вставить туда свою папку через C:\Users\user\AppData\Local\Programs\Python\Python312, но возникает та же ошибка.
  4. Я предположил, что Vscode не может получить доступ к моему файлу, так как думал, что у него нет авторизации, поэтому я зашел в C:\Users\user\AppData\Local\Programs\Microsoft VS Code, затем запустил Microsoft VS Code, переместил файл и запустил его. но появляется та же ошибка.
  5. Я предположил, что вместо этого мне нужно выбрать папку Microsoft VS Code, а не фактическую папку, в которой я храню свои проекты. Итак, я запустил его, но все равно появляется та же ошибка. Я попробовал это с папками Python, но ошибка все та же.
  6. Вместо этого я использовал другой путь C:\Users\user.vscode с двумя попытками, выбрав папку, в которой я храню свои проекты, и папку .vscode, но оба не сработали. Мне всегда приходилось каждый раз утомительно вставлять путь к файлу.
import shutil

shutil.copyfile("test",'copy.txt') #scr,dst

Ошибка:

Traceback (most recent call last):
  File "c:\Users\user\AppData\Local\Programs\Microsoft VS Code\My Projo's (VSCODE)\Python 🐍\Python 🐍 - Lessons\DUPEME", line 9, in <module>
    shutil.copyfile("test", "copy.txt")
  File "C:\Users\user\AppData\Local\Programs\Python\Python312\Lib\shutil.py", line 260, in copyfile
    with open(src, 'rb') as fsrc:
         ^^^^^^^^^^^^^^^
FileNotFoundError: [Errno 2] No such file or directory: 'test'

Используйте абсолютный путь или убедитесь, что рабочий каталог правильный.

rasjani 18.06.2024 12:43
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
1
69
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Используйте это, чтобы выяснить, что процессы Python видят в качестве текущего рабочего каталога (os.getcwd()) и какой файл они видят в этом каталоге:

import os
print(os.getcwd())
print(sorted(os.listdir('.')))

Альтернативно используйте абсолютные пути:

import os
import os.path
import shutil
mydir = r'C:\Users\user\Downloads'
shutil.copyfile(os.path.join(mydir, "test"), os.path.join(mydir, 'copy.txt'))

В приведенном ниже коде убедитесь, что вы используете необработанные строковые литералы, начинающиеся с r (r'...'), иначе Python будет неправильно интерпретировать обратную косую черту.

Ответ принят как подходящий

Проблем с кодом нет, проблема в том, откуда вы запускаете программу, и в существовании файла src. Ошибка «Нет такого файла или каталога: 'test'» означает, что Python ищет файл с именем «test» внутри текущего рабочего каталога, но не находит его. Этот код будет работать нормально, где бы вы его ни запускали на компьютере, если в рабочем каталоге существуют файлы «test» и «copy.txt». Хорошей практикой является выделение для каждого проекта нового каталога, а затем размещение в нем скрипта Python вместе с файлом «test» и файлом «copy.txt». Если все три существуют и находятся в одном месте, и вы запустите сценарий, он будет работать.

Действия по исправлению ошибки:

  1. Создайте новый каталог в нужном месте («C:\Users\user\project»).
  2. Создайте файл main.py в корне каталога и скопируйте скрипт в новый файл.
  3. Создайте новый файл с именем «test» в корне каталога. Содержимое этого файла будет скопировано в файл назначения.
  4. Создайте новый файл с именем «copy.txt» также в корне каталога.
  5. Теперь вы можете запустить программу из терминала, используя python3 main.py, просто убедитесь, что текущий рабочий каталог процесса терминала является корнем проекта. Вы можете убедиться в этом, запустив «cd C:\Users\user\project».

Если вы хотите изменить структуру проекта, чтобы скрипт можно было запускать из любого места, вы можете использовать абсолютные пути. Допустим, файл Python расположен в папке D:\scripts, а файлы «test» и «copy.txt» расположены в папке C:\Users\user\files. Вы можете заменить пути в коде Python их абсолютными путями: Shutil.copyfile("C:\Users\user\files\test", C:\Users\user\files\copy.txt"). Тогда скрипт Python будет работать, даже если он находится в совершенно отдельном каталоге.

Проблема заключалась в том, что я поместил «тест» в созданную мной папку, которая, в свою очередь, была вложена в другую папку, предназначенную для хранения моих проектов. Эта настройка привела к ошибке, с которой я столкнулся.

Для наглядности это выглядело так: папка примера > папка другого примера > файл «тест». Мне нужно было переместить его за пределы этой папки и за пределы папки, в которой я храню свои проекты. Затем это устранит ошибку, поскольку теперь он видит файл «test».

Я до сих пор не понимаю, как он не смог увидеть мой файл внутри одной из этих папок.

Другие вопросы по теме