FileNotFoundError, но файл существует - PullRequest
0 голосов
/ 18 ноября 2018

Я создаю приложение Python, которое импортирует много файлов JSON.Файлы находятся в той же папке, что и местоположение скрипта Python.Прежде чем я переместил всю папку куда-то еще, файлы импортировались отлично.Поскольку скрипт создает файлы, если их не существует, он продолжает создавать файл в домашнем каталоге, игнорируя тот в той же папке, в которой он находится. Когда я указываю абсолютный путь (код ниже):

startT= time()
    with open('~/Documents/CincoMinutos-master/settings.json', 'a+') as f:
        f.seek(0,0) # places pointer at start of file
        corrupted = False
        try:
            # turns all json info into vars with load
            self.s_settings = json.load(f)
            self.s_allVerbs = []
            # --- OFFLINE MODE INIT ---
            if self.s_settings['Offline Mode']: # conjugation file reading only happens if setting is on
                with open('~/Documents/CincoMinutos-master/verbconjugations.json', 'r+', encoding='utf-8') as f2: 
                    self.s_allVerbs = [json.loads(line) for line in f2]
            # --- END OFFLINE MODE INIT ---
            for key in self.s_settings:
                if not isinstance(self.s_settings[key], type(self.s_defaultSettings[key])): corrupted = True
        except Exception as e: # if any unexpected error occurs
            corrupted = True
            print('File is corrupted!\n',e)
        if corrupted or not len(self.s_settings):
            f.truncate(0) # if there are any errors, reset & recreate the file
            json.dump(self.s_defaultSettings, f, indent=2, ensure_ascii=False)
            self.s_settings = {key: self.s_defaultSettings[key] for key in self.s_defaultSettings}
    # --- END FILE & SETTINGS VAR INIT ---
    print("Finished loading file in {:4f} seconds".format(time()-startT))

Он выдает ошибку FileNotFound.

    Traceback (most recent call last):
  File "/Users/23markusz/Documents/CincoMinutos-master/__main__.py", line 709, in <module>
    frame = CincoMinutos(root)
  File "/Users/23markusz/Documents/CincoMinutos-master/__main__.py", line 42, in __init__
    with open('~/Documents/CincoMinutos-master/settings.json', 'a+') as f:
FileNotFoundError: [Errno 2] No such file or directory: '~/Documents/CincoMinutos-master/settings.json'

Имейте в виду, что я совершенно способен получить к нему доступ по тому же абсолютному пути, когда я работаю с терминала.Может кто-нибудь объяснить, что мне нужно сделать для правильного импорта файлов?

Кроме того, я создаю это приложение для нескольких пользователей.Хотя /Users/23markusz/Documents/CincoMinutos-master/verbconjugations.json работает, он не будет работать в системе другого пользователя.Этот файл также находится в ЖЕ ПАПКА как скрипт, поэтому он должен импортировать правильно.

ОБНОВЛЕНИЕ: Хотя моя проблема решена с помощью os.path.expanduser (), я все еще не понимаюпочему python отказывается открывать файл, который находится в той же папке, что и скрипт python.Он должен автоматически открыть файл, указав только имя файла, а не абсолютный путь.

1 Ответ

0 голосов
/ 18 ноября 2018

"~" не является настоящим каталогом (и не может рассматриваться как «абсолютный путь»), и поэтому открытие не работает.

Чтобы развернуть тильду в фактический каталог (например, /Users/23markusz), вы можете использовать os.path.expanduser:

import os
...
with open(os.path.expanduser('~/Documents/CincoMinutos-master/settings.json'), 'a+') as f:
    # Do stuff
...