Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python FileNotFoundError,但文件存在_Python_Json_Python 3.x_Filenotfoundexception - Fatal编程技术网

Python FileNotFoundError,但文件存在

Python FileNotFoundError,但文件存在,python,json,python-3.x,filenotfoundexception,Python,Json,Python 3.x,Filenotfoundexception,我正在创建一个导入许多JSON文件的Python应用程序。这些文件与python脚本的位置位于同一文件夹中。在我将整个文件夹移到其他地方之前,这些文件已完全导入。由于脚本会在不存在文件的情况下创建一个文件,因此它会在主目录中继续创建该文件,而忽略与它在同一文件夹中的文件。当我指定绝对路径时(下面的代码): 它会抛出一个FileNotFound错误 Traceback (most recent call last): File "/Users/23markusz/Documents/C

我正在创建一个导入许多JSON文件的Python应用程序。这些文件与python脚本的位置位于同一文件夹中。在我将整个文件夹移到其他地方之前,这些文件已完全导入。由于脚本会在不存在文件的情况下创建一个文件,因此它会在主目录中继续创建该文件,而忽略与它在同一文件夹中的文件。当我指定绝对路径时(下面的代码):

它会抛出一个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/_-main.py”,第709行,在
frame=CincoMinutos(根)
文件“/Users/23markusz/Documents/CincoMinutos master/_main__.py”,第42行,in__init__
将open(“~/Documents/CincoMinutos master/settings.json”,“a+”)作为f:
FileNotFoundError:[Errno 2]没有这样的文件或目录:“~/Documents/CincoMinutos master/settings.json”
请记住,当我从终端操作时,我完全能够以相同的绝对路径访问它。有人能解释一下我需要做什么才能正确导入文件吗

此外,我正在为多个用户创建此应用程序。虽然
/Users/23markusz/Documents/CincoMinutos master/verbconjugations.json确实有效,但它不会在其他用户的系统上运行。此文件也与脚本位于同一文件夹中,因此应该正确导入

更新: 虽然我的问题是使用os.path.expanduser()解决的,但我仍然不理解python为什么拒绝打开与python脚本位于同一文件夹中的文件。它应该只使用文件名而不是绝对路径自动打开文件。

“~”
不是真正的目录(也不符合“绝对路径”)这就是为什么打开不起作用

为了将波浪线扩展到实际目录(例如,
/Users/23markusz
),您可以使用:

“~”
不是真正的目录(也不符合“绝对路径”)这就是为什么open不起作用

为了将波浪线扩展到实际目录(例如,
/Users/23markusz
),您可以使用:



尝试将
/Documents/CincoMinutos master/settings.json
替换为
~/Documents/CincoMinutos master/settings.json
我尝试了这两种方法,但它们都会产生错误。您能否在python解释器上执行
导入操作系统
,然后执行
操作系统.getcwd()
(与文件所在的目录相同)并对结果进行注释?它返回的结果是“/Users/23markusz/Documents/CincoMinutos-master”,您是否可以尝试将
~/Documents/CincoMinutos-master/settings.json
替换为绝对路径
/Users/23markusz/Documents/CincoMinutos-master/settings.json
,看看这是否有效?尝试替换
/Documents/CincoMinutos master/settings.json
使用
~/Documents/CincoMinutos master/settings.json
我尝试了这两种方法,但都产生了错误。您能否在python解释器上执行
导入操作系统
,然后执行
操作系统.getcwd()
并对结果进行注释?它返回的结果是“/Users/23markusz/Documents/CincoMinutos-master”,您可以尝试将
~/Documents/CincoMinutos-master/settings.json
替换为绝对路径
/Users/23markusz/Documents/CincoMinutos-master/settings.json
,看看这是否有效吗?您忘记应用该函数了
os.path.expanduser
在您的示例中。这很尴尬。我仍然不明白为什么python拒绝打开与python脚本位于同一文件夹中的文件。难道它不应该只使用文件名而不是绝对路径自动打开文件吗。如果您尝试打开相对路径(例如,
“settings.json”
),它将相对于当前目录,而不是脚本的目录。这意味着您必须是终端中的确切目录,才能使open正常工作。(我不知道情况是否如此)。不管怎样,因为用户可以从任何目录调用您的脚本,这都不是一个好主意。这很有意义!谢谢!您忘记在示例中应用函数
os.path.expanduser
。这很尴尬。我仍然不明白为什么python拒绝打开与python脚本位于同一文件夹中的文件。难道它不应该只使用文件名而不是绝对路径自动打开文件吗。如果您尝试打开相对路径(例如,
“settings.json”
),它将相对于当前目录,而不是脚本的目录。这意味着您必须是终端中的确切目录,才能使open正常工作。(我不知道情况是否如此)。不管怎样,因为用户可以从任何目录调用您的脚本,这都不是一个好主意。这很有意义!谢谢!
    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'
import os
...
with open(os.path.expanduser('~/Documents/CincoMinutos-master/settings.json'), 'a+') as f:
    # Do stuff