FileNotFoundError 但文件存在
FileNotFoundError but file exists
我正在创建一个导入许多 JSON 文件的 Python 应用程序。这些文件与 python 脚本所在的文件夹位于同一文件夹中。在我将整个文件夹移到其他地方之前,文件已完美导入。由于脚本会在 none 存在的情况下创建文件,因此它会继续在主目录中创建文件,同时忽略与其所在的同一文件夹中的文件。当我指定绝对路径时(下面的代码):
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 脚本位于同一文件夹中的文件。它应该只使用文件名而不是绝对路径自动打开文件。
"~"
不是真正的目录(也不符合 "absolute path" 的条件),这就是 open 不起作用的原因。
为了将波浪号扩展到实际目录(例如 /Users/23markusz
),您可以使用 os.path.expanduser
:
import os
...
with open(os.path.expanduser('~/Documents/CincoMinutos-master/settings.json'), 'a+') as f:
# Do stuff
我正在创建一个导入许多 JSON 文件的 Python 应用程序。这些文件与 python 脚本所在的文件夹位于同一文件夹中。在我将整个文件夹移到其他地方之前,文件已完美导入。由于脚本会在 none 存在的情况下创建文件,因此它会继续在主目录中创建文件,同时忽略与其所在的同一文件夹中的文件。当我指定绝对路径时(下面的代码):
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 脚本位于同一文件夹中的文件。它应该只使用文件名而不是绝对路径自动打开文件。
"~"
不是真正的目录(也不符合 "absolute path" 的条件),这就是 open 不起作用的原因。
为了将波浪号扩展到实际目录(例如 /Users/23markusz
),您可以使用 os.path.expanduser
:
import os
...
with open(os.path.expanduser('~/Documents/CincoMinutos-master/settings.json'), 'a+') as f:
# Do stuff