鱼C论坛

 找回密码
 立即注册
查看: 279|回复: 2

[已解决]永久存储的rename方法

[复制链接]
发表于 2025-7-23 19:41:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
>>> n = n / "FishC.txt"
>>> n
WindowsPath('D:/Program Files/python3.7/FishC/A/B/C/FishC.txt')
>>> f = n.open("w")
>>> f.write("I love FishC.")
13
>>> f.close()
>>> n.rename("NewFishC.txt")
>>> n
WindowsPath('D:/Program Files/python3.7/FishC/A/B/C/FishC.txt')
>>> n.exists()
False
>>> n.name
'FishC.txt'

使用rename方法后,n文件本身已经被移动到Python大本营当中,但是n本身的位置为什么还在之前的文件夹里面,使用rename方法以后,文件本身找不到了(使用exists方法显式False),但n的名字本身为什么还是“FishC.txt”。
我看小甲鱼用的时Python3.9.9,我用的时3.7.7。所以这个结果适合IDLE的版本有关系吗?还是说跟rename方法的底层逻辑有关系,哪个大佬能指教一下。
最佳答案
2025-7-23 21:54:20
这个问题与Python版本关系不大,主要与Path对象的特性和rename方法的底层机制有关‌。以下是具体原因分析:
Path对象不可变性‌
WindowsPath对象本身是不可变的,rename操作会返回一个新路径对象而不会修改原对象。执行n.rename()后,原n变量仍保持原始路径值‌。
文件系统操作与对象状态的差异‌
虽然物理文件已被重命名/移动,但Python的Path对象不会自动更新状态。n.name仍显示原始文件名是因为它只是读取对象存储的原始字符串值‌。
正确的使用方法‌
应该捕获rename()的返回值来获取新路径:
python
Copy Code
new_n = n.rename("NewFishC.txt")
此时new_n会显示新路径,而原n对象保持不变‌。
exists()返回False的原因‌
当文件被重命名后,原路径自然不再存在。这是文件系统层面的正常现象,与Python版本无关‌。
建议使用绝对路径操作并始终处理rename()返回值,这是更可靠的做法‌。若需要持续跟踪文件状态,建议每次操作后重新创建Path对象。


就是Path 对象还没变
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-11-2 10:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表