我使用多个python脚本来收集数据并将其写入一个单独的json数据文件。
无法组合脚本。
编写过程很快,并且经常发生错误(例如,最后复制的一些字符),这是致命的,特别是因为我使用的是json格式。
如果有其他脚本当前正在尝试写入文件,有没有办法阻止python脚本写入文件? (如果python脚本试图写入文件的数据丢失,那绝对没问题,但重要的是文件语法不会以某种方式“受伤”。)
代码已截断:
这将打开文件并检索数据:
data = json.loads(open("data.json").read())
这会附加一个新词典:
data.append(new_dict)
旧文件被覆盖:
open("data.json","w").write( json.dumps(data) )
信息 data
是一个包含词组的列表。
操作系统:洞穴程序在linux服务器上进行。
答案 0 :(得分:0)
在Windows上,您可以尝试创建该文件,并在发生异常时挽救(因为文件被另一个脚本锁定)。但是在Linux上,你的方法肯定会失败。
相反,我会
所以在每个剧本中:
filename = "data_{}_{}.json".format(os.getpid(),counter)
counter+=1
open(filename ,"w").write( json.dumps(new_dict) )
并在消费者中(读取受保护循环中已排序文件的每个dict):
files = sorted(glob.glob("*.json"),key=os.path.getmtime())
data = []
for f in files:
try:
with open(f) as fh:
data.append(json.load(fh))
except Exception:
# IO error, malformed json file: ignore
pass
答案 1 :(得分:0)
我会发布自己的解决方案,因为它对我有用:
每个python脚本都会检查(在打开和写入数据文件之前)是否存在名为data_check
的文件。如果是这样,pyhthon脚本不会尝试读取和写入文件并解除应该写入文件的数据。如果没有,python脚本会创建文件data_check
,然后开始读取文件。写入过程完成后,文件data_check
将被删除。