【问题标题】:After I deleted a file, why os.path.abspath() still shows its path? [duplicate]删除文件后,为什么 os.path.abspath() 仍然显示其路径? [复制]
【发布时间】: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仍然显示它存在??

【问题讨论】:

    标签: python file path


    【解决方案1】:

    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//BA/B/A/./BA/foo/../B 都变为 A/B。这种字符串操作可能会改变包含符号链接的路径的含义。在 Windows 上,它将正斜杠转换为反斜杠。

    这又只是字符串操作。如果您的输入以../ 开头,那么这将导致os.getcwd() 结果中的一个元素被删除,等等。

    【讨论】:

      猜你喜欢
      • 2021-06-09
      • 1970-01-01
      • 2023-01-17
      • 2018-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-22
      • 2013-10-30
      相关资源
      最近更新 更多