在不同的目录中打开JSON文件 - Python3,Windows,pathlib

时间:2016-08-21 03:50:56

标签: json windows python-3.x

我正在尝试打开位于当前工作目录(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 '/'

2 个答案:

答案 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: