Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.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 如何修改多个json文件_Python_Json - Fatal编程技术网

Python 如何修改多个json文件

Python 如何修改多个json文件,python,json,Python,Json,我有一个包含100个json文件的文件夹,我必须在每个文件的开头添加[,在结尾添加] 文件结构为: { item } 但是,我需要像这样对它们进行转换: [{ item }] 如何做到这一点?虽然我通常会建议对与json相关的任何内容使用json.load和json.dump,但由于您的具体要求,以下纸条应该足够了: 导入操作系统 chdir('目录的路径') 对于os.listdir('.')中的fp: 如果fp.endswith('.json'): f=打开(fp,'r+') conte

我有一个包含100个json文件的文件夹,我必须在每个文件的开头添加
[
,在结尾添加
]

文件结构为:

{
item
}
但是,我需要像这样对它们进行转换:

[{
item
}]

如何做到这一点?

虽然我通常会建议对与json相关的任何内容使用
json.load
json.dump
,但由于您的具体要求,以下纸条应该足够了:

导入操作系统
chdir('目录的路径')
对于os.listdir('.')中的fp:
如果fp.endswith('.json'):
f=打开(fp,'r+')
content=f.read()
f、 搜索(0)
f、 截断()
f、 写入('['+content+']')
f、 关闭()

您可以使用glob模块解析所有文件。然后您可以读取内容,然后修改该内容并写回文件

from glob import glob

for filename in glob('./json/*.json'):
    f = open(filename, 'r')
    contents = f.read()
    f.close()
    new_contents = f"[{contents}]"
    f = open(filename, 'w')
    f.write(new_contents)
    f.close()
$ jq '.=[.]' test.json | sponge test.json
$ cat test.json
TL;博士
#一个文件
$jq'.=[.]'test.json |海绵test.json
#许多文件
找到-键入f-name'*.json'-exec sh-c“jq.”=[.]'“{}”海绵“{}”\;
崩溃 让我们拿一个示例文件

$cat test.json
{
“你好”:“世界”
}
$jq'=[.]'test.json
上面的点(.)表示根节点。所以我把根节点放在括号里。因此,我们得到:

[
{
“你好”:“世界”
}
]
现在我们需要获取输出并将其放回文件中

from glob import glob

for filename in glob('./json/*.json'):
    f = open(filename, 'r')
    contents = f.read()
    f.close()
    new_contents = f"[{contents}]"
    f = open(filename, 'w')
    f.write(new_contents)
    f.close()
$ jq '.=[.]' test.json | sponge test.json
$ cat test.json
[
{
“你好”:“世界”
}
]
接下来,让我们找到所有要执行此操作的json文件

$ find . -type f -name '*.json' 
./test.json
我们可以迭代find命令的每一行,并按如下方式对其进行分类:

$find-类型f-名称'*.json'-exec cat{}\;
{
“你好”:“世界”
}
或者我们可以编写我们需要的jq命令。文件名被传递到
-exec
\之间的大括号中

$find-键入f-name'*.json'-exec sh-c“jq.”=[.]'“{}”海绵“{}”\;

感谢

json.dump([json.load(infle)],outfile)
。使用GNU sed:
sed-i'1s/^/[;$s/$/]/'file.json