我正在尝试打开位于当前工作目录(cwd)以外的目录中的JSON文件。我的设置:Windows上的Python3.5(使用Anaconda)。
from pathlib import *
import json
path = Path("C:/foo/bar")
filelist = []
for f in path.iterdir():
filelist.append(f)
for file in filelist:
with open(file.name) as data_file:
data = json.load(data_file)
在此设置中,我有以下值:
file >> C:\foo\bar\0001.json
file.name >> 0001.json
但是,我收到以下错误消息:
---> 13 with open(file.name) as data_file:
14 data = json.load(data_file)
FileNotFoundError: [Errno 2] No such file or directory: '0001.json'
使用.joinpath()将目录添加到open命令中的文件名:
with open(path.joinpath(file.name)) as data_file:
data = json.load(data_file)
TypeError: invalid file: WindowsPath:('C:/foo/bar/0001.json')
使用.resolve(),因为我可以将CSV文件加载到Pandas中。没在这里工作。
for file in filelist:
j = Path(path, file.name).resolve()
with open(j) as data_file:
data = json.load(data_file)
因为我在Windows上写道路径(是的,该文件在该目录中):
path = Path("C:\\foo\\bar") #resulted in the same FileNotFoundError above.
实例化这样的路径:
path = WindowsPath("C:/foo/bar")
#Same TypeError as above for both '\\' and '/'
答案 0 :(得分:5)
可接受的答案有很多重复之处-重新收集生成器并与带有pathlib.Path的语句混合。 pathlib.Path是处理路径的绝佳解决方案,尤其是当我们要创建可在Linux和Windows上运行的脚本时。
# modules
from pathlib import Path
import json
# static values
JSON_SUFFIXES = [".json", ".js", ".other_suffix"]
folder_path = Path("C:/users/user/documents")
for file_path in folder_path.iterdir():
if file_path.suffix in JSON_SUFFIXES:
data = json.loads(file_path.read_bytes())
只需为新用户添加修改即可。 pathlib.Path与Python3兼容。
答案 1 :(得分:1)
完整的解决方案;谢谢@eryksun:
from pathlib import *
import json
path = Path("C:/foo/bar")
filelist = []
for f in path.iterdir():
filelist.append(f)
for file in filelist:
with open(str(file) as data_file:
data = json.load(data_file)
这条线也适用:
with file.open() as data_file: