你能强迫吗os.path.isfile文件()在检查区分大小写的文件系统上的文件时使用不区分大小写?

2024-06-12 07:23:02 发布

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

如果我使用os.path.isfile("foo.txt")来检查名为Foo.txt的文件,则函数在不区分大小写的文件系统和窗口中返回True。但是,对于区分大小写的文件系统,它返回False。有没有一种方法可以强制对isfile()进行不区分大小写的检查,即使在区分大小写的文件系统上也是如此?我知道有一种方法可以在Windows上强制区分大小写,但是另一种方法呢?在

背景

我正在处理DITA内容。如果在Windows上开发DITA内容并将内容部署到区分大小写的Linux服务器上,那么如果href属性的字符大小写与实际目标文件的大小写不同,则可能导致主题之间的链接断开。我试图创建一个脚本,它遍历我们的DITA源代码中的每个href属性,而不是外部链接,并更新它以匹配实际文件的大小写。我可以使用beauthoulsoup模块获得href属性,但是我很难弄清楚如何检查和验证实际文件名,以便可以使用该字符串更新DITA源中的href属性。在

一种更为严格的方法是,只需将每个href及其目标文件转换为小写,但如果外部站点有指向您内容的链接,并且它们已经使用了正确的案例,则这可能会导致不同的问题。在

isfile()函数可能不是执行此任务的正确工具,但这只是一个开始。我想我总是可以在Windows上运行这个脚本,但这不太优雅。最好让脚本在大多数系统上正常运行。在


Tags: 文件方法函数txt脚本内容目标属性
1条回答
网友
1楼 · 发布于 2024-06-12 07:23:02

您可以列出父目录中的所有文件,并不区分大小写检查文件名:

import os

def getfile_insensitive(path):
    directory, filename = os.path.split(path)
    directory, filename = (directory or '.'), filename.lower()
    for f in os.listdir(directory):
        newpath = os.path.join(directory, f)
        if os.path.isfile(newpath) and f.lower() == filename:
            return newpath

def isfile_insensitive(path):
    return getfile_insensitive(path) is not None

函数isfile_insensitive返回一个布尔值,指定父目录中是否存在与要查找的不区分大小写的文件名匹配的文件名。在

函数getfile_insensitive返回现有文件名的路径(大小写正确),这样您就可以在系统中安全地使用该文件名。在

相关问题 更多 >