我想重命名report.json,但是它正在删除文件
import os
from pathlib import Path
import json
path =Path( r'C:\Users\Sajid\Desktop\cuckoo (3)\cuckoo\storage\analyses\3\reports')
filename = os.path.join(path,"report.json")
with open(filename) as json_file:
data=json.load(json_file)
var=(data['target']['file']['md5'])
print(var)
json_file.close()
os.rename(filename,var)
我希望这段代码可以重命名文件而不是删除文件
答案 0 :(得分:0)
它可能不是删除它,而是将其移动到您的工作目录中(因此,如果您从C:\Users\Sajid
启动脚本,则文件将在其中,而不是在C:\Users\Sajid\Desktop\cuckoo (3)\cuckoo\storage\analyses\3\reports
中)。 编辑:基于your comment,这肯定是正在发生的事情;第一次运行代码时,它将代码移至工作目录(包含组件cuckoo (1)
,您可能希望将其转到包含组件cuckoo (3)
的目录),第二次失败,原因是{ {1}}不会覆盖Windows上的现有文件。
更改它以将所需的目标目录与文件的基本名称la组合在一起:
os.rename
因此它位于同一目录中。
您也不必要地关闭文件两次(一次显式关闭,一次通过var = os.path.join(str(path), os.path.basename(data['target']['file']['md5']))
块终止隐式关闭)。碰巧,第一个是必要的,但这只是因为您将with
保留在rename
块内。最简单的解决方案是只删除with
块外的多余close
和rename
(实际上,您不需要在with
之后打开它,因此您可以最好关闭它)
json.load
按照书面规定,您不会替换现有文件(在Windows上;在类似UNIX的系统上,它将替换);如果要在任何地方静默替换现有文件,请使用with open(filename) as json_file:
data = json.load(json_file)
# Dedent to implicitly close file
var = os.path.join(str(path), os.path.basename(data['target']['file']['md5']))
print(var)
os.rename(filename,var)
而不是os.replace
。