【发布时间】:2023-03-20 07:35:02
【问题描述】:
print(os.path.exists("77.txt"))
print(os.path.isfile("77.txt"))
os.path.abspath("77.txt")
----------
False
False
'/home/nbuser/library/parent_dir/files_exercises/77.txt'
我删除了一个文件,为什么abspath仍然显示它存在??
【问题讨论】:
print(os.path.exists("77.txt"))
print(os.path.isfile("77.txt"))
os.path.abspath("77.txt")
----------
False
False
'/home/nbuser/library/parent_dir/files_exercises/77.txt'
我删除了一个文件,为什么abspath仍然显示它存在??
【问题讨论】:
os.path.abspath() 不关心路径是否存在。 abspath() 只操作字符串。
如果输入路径不是绝对路径,则当前工作目录(os.getcwd(),一个字符串)与输入路径组合形成一个新的有效路径字符串。 就是这样。
来自os.path.abspath() documentation:
返回路径名
path的规范化绝对版本。在大多数平台上,这相当于调用函数normpath(),如下:normpath(join(os.getcwd(), path))。
因此,这使用os.path.join() 将os.getcwd()(返回字符串路径)与输入值path 连接起来。后者不进行任何文件系统检查:
智能地加入一个或多个路径组件。返回值是
path和*paths的任何成员的串联,除了最后一个以外的每个非空部分都紧跟一个目录分隔符(os.sep),这意味着结果只会在最后一个分隔符中结束部分为空。如果一个组件是绝对路径,则所有之前的组件都被丢弃,并从绝对路径组件继续连接。
所以如果path 是一个绝对路径开始,os.getcwd() 结果将被忽略。否则,在两个字符串之间最多插入一个os.sep 字符串。然后将结果传递给os.path.normpath():
通过折叠冗余分隔符和上级引用来规范化路径名,以便
A//B、A/B/、A/./B和A/foo/../B都变为A/B。这种字符串操作可能会改变包含符号链接的路径的含义。在 Windows 上,它将正斜杠转换为反斜杠。
这又只是字符串操作。如果您的输入以../ 开头,那么这将导致os.getcwd() 结果中的一个元素被删除,等等。
【讨论】: