如果我使用os.path.isfile("foo.txt")
检查名为Foo.txt
的文件,则该函数会在不区分大小写的文件系统和Windows上返回True
。但是,它在区分大小写的文件系统上返回False。有没有办法强制对isfile()
进行不区分大小写的检查,即使在区分大小写的文件系统上也是如此?我知道有一种方法可以在Windows上对此功能强制区分大小写,但另一种方法呢?
背景
我正在使用DITA内容。如果您在Windows上开发DITA内容并将内容部署到区分大小写的Linux服务器,则如果您的href属性具有与实际目标文件不同的大小写的字符,则最终可能会在主题之间断开链接。我正在尝试创建一个脚本,该脚本遍历我们的DITA源中不是外部链接的每个href属性,并更新它以匹配实际文件的大小写。我能够使用beautifulsoup模块获取href属性,但是我很难弄清楚如何检查和验证实际的文件名,这样我就可以使用该字符串来更新我的DITA源中的href属性。 / p>
更严厉的方法是将每个href及其目标文件转换为小写,但如果外部网站链接到您的内容并且他们已经有正确的案例工作,那么这可能会导致不同的问题。
isfile()函数可能不是这项工作的正确工具,但它是一个开始。我想我总是可以在Windows上运行这个脚本,但这不是很优雅。最好让脚本在大多数系统上正常运行。
答案 0 :(得分:2)
您可以列出父目录中的所有文件,并以不区分大小写的方式检查文件名:
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
返回现有文件名的路径(正确大小写),因此您可以在系统中安全地使用该文件名。
答案 1 :(得分:0)
如果您希望在Windows(不敏感的操作系统)中获得相同的结果,这很简单,
bool_test = os.path.isfile(path.lower()) or os.path.isfile(path.upper())