Почему программа не может найти файл, даже если он существует?

Вчера на работе программа работала без каких-либо проблем и успешно выводила данные из нужного файла. Сегодня я решил протестировать ее у себя дома. Однако, при запуске программы появляется следующая ошибка: 

<pre><code class="python">IR.kml
Traceback (most recent call last):
  File "E:\Github\FillingInDataForTheSite\py.py", line 174, in &lt;module&gt;
    with open(kmlfile,"r", encoding="utf8") as rdbfile:
         ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^</code></pre>

Как видно, программа выдает ошибку об отсутствии файла, хотя файл доступен и находится в папке data, как видно из вывода команды: 

<pre><code>$ ls data/IRK/
IR.kml</code></pre>

Почему программа не может его считать? Забавно, что на работе все работало корректно. Вот фрагмент моего кода: 

<pre><code class="python">import pandas as pd
import os
import re
...
        netpath = "data/"
        lengthdir=len(netpath)
        listreg=['IRK','MGD','SAH','KHA','KAM']
        for root, dirs, files in os.walk(netpath):
            alldir = root[lengthdir:]
            #print(alldir) 
            if ("old" in alldir):
                #print("FALSE")
                continue
            elif alldir in listreg:
                #print(alldir)
                for kmlfile in files:
                    #print(kmlfile)
                    if prefixs[0] in kmlfile:
                        #print("Это выгрузка из всех сайтов RDB")
                        print(kmlfile)
                        with open(kmlfile,"r", encoding="utf8") as rdbfile:
                            file = rdbfile.read()
                        
                        print(file)
                        #7 Добавить данные LAC и BCF в таблицу:

            else:
                #print("TRUE")
  • 30 ноября 2024 г. 2:23
Ответы на вопрос 2
Судя по описанию вашей проблемы, ошибка "файл не найден" может возникать по нескольким причинам, даже если файл действительно существует в указанной директории. Вот несколько моментов, на которые следует обратить внимание:

1. **Путь к файлу**: 
   В вашем коде вы используете `os.walk` для перебора файлов, но в строке, где вы открываете файл, вы используете только имя файла (`kmlfile`), а не полный путь к файлу. Поэтому программа ищет файл в текущем рабочем каталоге, а не в директории, где находится ваш файл. Чтобы исправить это, нужно создать полный путь к файлу:

   ```python
   file_path = os.path.join(root, kmlfile)
   with open(file_path, "r", encoding="utf8") as rdbfile:
   ```

2. **Текущий рабочий каталог**:
   Убедитесь, что текущий рабочий каталог вашей программы совпадает с тем, который вы ожидали. Для этого вы можете добавить строку, чтобы вывести текущий каталог:
   
   ```python
   print("Текущий рабочий каталог:", os.getcwd())
   ```

3. **Регистры имен файлов**: 
   Обратите внимание на регистры имен файлов. На некоторых операционных системах, таких как Windows, регистр не важен, но на других, таких как Linux, он имеет значения. Убедитесь, что ваше имя файла написано правильно и соответствует регистру.

4. **Различия в окружении**:
   Если файл работает на одной машине, а проблема появляется на другой, возможно, различия в окружении (например, версия Python, модули или настройки системы) могут влиять на поведение программы.

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

```python
for root, dirs, files in os.walk(netpath):
    alldir = root[lengthdir:]
    if ("old" in alldir):
        continue
    elif alldir in listreg:
        for kmlfile in files:
            if prefixs[0] in kmlfile:
                full_path = os.path.join(root, kmlfile)  # Создаем полный путь к файлу
                print(full_path)  # Вывод полного пути для отладки
                with open(full_path, "r", encoding="utf8") as rdbfile:
                    file = rdbfile.read()
                print(file)
    else:
        # остальная логика
```

Попробуйте внести эти изменения и проверьте, решит ли это проблему.
Вот так код перепсал. не знаю провально л нет. но работает: 
#print("Это выгрузка из всех сайтов RDB")
                        print("Считываю данные со всех базовых станций:")
                        #print(kmlfile)                        
                        needdir = netpath+alldir+"/"+kmlfile
                        #print(needdir)
                        #with open(kmlfile,"r", encoding="utf8") as rdbfile:
                        with open(needdir,"r", encoding="utf8") as rdbfile:
                            file = rdbfile.read()
                        #print(file)
Похожие вопросы