为什么这段代码要删除文件而不是重命名它?

2024-06-01 06:41:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我想重新命名报表.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)

我希望这段代码重命名文件,而不是删除它


Tags: 文件pathfromimportjsondata报表os
1条回答
网友
1楼 · 发布于 2024-06-01 06:41:52

它可能不是删除它,而是将它移动到您的工作目录中(因此,如果您从C:\Users\Sajid启动脚本,则文件将在那里,而不是在C:\Users\Sajid\Desktop\cuckoo (3)\cuckoo\storage\analyses\3\reports)。编辑:基于your comment,这肯定是正在发生的事情;第一次运行代码时,它将代码移到工作目录(使用组件cuckoo (1),您可能希望它移到使用组件cuckoo (3)的目录),第二次失败是因为os.rename不会覆盖Windows上的现有文件。你知道吗

将其更改为将所需的目标目录与文件的基本名称(la:

var = os.path.join(str(path), os.path.basename(data['target']['file']['md5']))

所以它保持在同一个目录中。你知道吗

您还不必要地关闭了文件两次(一次显式关闭,一次通过with块终止隐式关闭)。碰巧,第一个是必需的,但这只是因为您将rename放在了with块中。最简单的解决方案是只删除close块之外的rename(实际上,您不需要在json.load之后打开它,因此您也可以关闭它):

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)

如前所述,您不会替换现有文件(在Windows上;在类似UNIX的系统上,它会);如果您想无提示地到处替换现有文件,请使用os.replace而不是os.rename。你知道吗

相关问题 更多 >