修改前的json内容为:
{
"filename":"1.dav";
}
需要修改为:
{
"filename":"2.avi";
}
目前已经大致知道可以使用
import json
path = u'D:'
dict = {}
get_json_date = json.load(f)
修改json内容
with open(path,'w',endcode='utf8') as r:
json_dump = json.dump()
r.close()
不清楚如何批量获取及修改json内的filename,视频名称对应文件夹名称,请大佬指教,谢谢!
目前写出的代码如下,在自己家写的代码报了 PermissionError: [Errno 13] Permission denied 错误
import json
import os
def get_json_data(old_json_path):
for root,dirs,files in os.walk(old_json_path):
for file_name in files:
if file_name.endswith('.json'):
with open(old_json_path,'r',encoding='utf8') as f:
content = f.read()
json_content = eval(content)
print(type(json_content))
if 'fileName' in json_content:
content_str = json_content.replace('1.dav','1.avi')
json_data = json.loads(content_str)
print(type(json_data))
with open(old_json_path,'w',encoding='utf8') as r:
r.write(old_json_path)
if name == "main":
old_json_path = r"D:\python\练习\改json内容\test"
get_json_data(old_json_path)
# -*- coding: utf-8 -*-
import json
def main():
json_str = '{"filename": "1.dav"}'
path = "result.json"
get_json_data = json.loads(json_str)
with open(path, "w") as r:
get_json_data["filename"] = "2.avi" # 这一步就是修改json的内容
r.write(json.dumps(get_json_data))
if __name__ == "__main__":
main()
Hi,有几点注意下:
感谢感谢
您好:
就是目前我还想将json更改的内容
get_json_data["filename"] = "2.avi" # 后面的“2.avi”更改为获取到文件夹名称后,使用文件夹的名称直接更改,文件夹的名称导出时就已经被命名为xxx.avi的格式了,
获取时使用遍历文件夹的方式获取到文件夹名称:
list_name = []
for root,dirs,files in os.walk(file_path):
for file_name in files:
if file_name.endswith(".dav"):
list_name.append
我想的是将文件夹名称添加到列表中,然后将列表中的名称和相对应的文件夹名称匹配后,批量修改文件夹中的json文件,json文件中的内容均为{“fileName”:“1.dav”},添加到列表后的代码应该如何写,您能再指点下吗
@奔三的人: 你好,能否把你的代码贴出来,我直接再上面改
@wang_yb: 您好,目前代码已经完成了,请您看下代码是否可以精简一些,目前这个脚本完成了一个获取旧文件夹内的内容并修改后,拷贝至新的文件夹的功能
import os
import json
import shutil
def get_json_data(old_json_path):
result = []
for root,dirs,files in os.walk(old_json_path):
for file_name in files:
if file_name.endswith('.json'):
old_json_file_path = os.path.join(root,file_name)
result.append(old_json_file_path)
return result
def get_dir_name(dir_name):
dir_name_result = []
for root,dirs,files in os.walk(dir_name):
for dir in dirs:
dirpath = os.path.join(root,dir)
dir_name_result.append(dirpath)
return dir_name_result
def read_json(filepath):
with open(filepath,'r',encoding='utf-8')as f:
json_data = f.read()
json_data_str = eval(json_data)
json_data_str.update({"fileName":filepath.split("\")[-2].replace(".dav",".avi")})
return json_data_str
def write_json(filepath,newdata):
with open(filepath,'w',encoding='utf-8')as r:
json.dump(newdata,r,indent=4,ensure_ascii=False)
if name == "main":
old_json_path = r'D:\ss'
new_json_path = r'D:\json'
dirlist = get_dir_name(old_json_path)
for dir in dirlist:
print(dir)
json_file_list = get_json_data(dir)
for json_file in json_file_list:
print(json_file)
dir_name = dir.split("\")[-1]
new_dir_name = os.path.join(new_json_path,dir_name)
if os.path.exists(new_dir_name):
shutil.copy(json_file,new_dir_name)
newdata = read_json(new_dir_name + "\" + os.path.basename(json_file))
write_json(new_dir_name + "\" + os.path.basename(json_file),newdata)
else:
os.mkdir(new_dir_name)
shutil.copy(json_file,new_dir_name)
newdata = read_json(new_dir_name + "\" + os.path.basename(json_file))
write_json(new_dir_name + "\" + os.path.basename(json_file),newdata)
@奔三的人: 已经完成了,great! 😃
有几个小建议:
# ```python
# your codes
# ```
if not os.path.exists(new_dir_name):
os.mkdir(new_dir_name)
shutil.copy(json_file, new_dir_name)
newdata = read_json(new_dir_name + "\\" + os.path.basename(json_file))
write_json(new_dir_name + "\\" + os.path.basename(json_file), newdata)
@wang_yb: 多谢您的指点!谢谢!
1.把json转成集合列表
2.循环列表属性,修改
可以麻烦您再细说一下吗