假设我拥有文件扩展名除外的完整路径:
FileNoExt = "/Users/username/Desktop/song"
我需要检索完整路径包括文件扩展名,并将其传递给变量:
FileWithExt = "/Users/username/Desktop/song.mp3"
我在stackexchange上发现了很多类似的问题;但是,所有答案似乎都不起作用。我在macOS上使用PyCharm。
答案 0 :(得分:2)
您可以像使用glob
模块一样
>>> import glob
>>> file_wo_ext = '/home/xxx/python/doc'
>>> glob.glob(file_wo_ext + '*')
['/home/xxx/python/doc.comments', '/home/xxx/python/doc.fornow']
或者,如果您习惯了pathlib
,则可以执行类似的操作
>>> import pathlib
>>> file_wo_ext = '/home/xxx/python/doc'
>>> p = pathlib.Path(file_wo_ext)
>>> p.parent
PosixPath('/home/xxx/python')
>>> p.stem
'doc'
>>> list(p.parent.glob(p.stem + '*'))
[PosixPath('/home/xxx/python/doc.comments'), PosixPath('/home/xxx/python/doc.fornow')]
答案 1 :(得分:0)
下面是一个更长但更易于理解的解决方案,显示了“幕后”发生的一些情况;它检索filename
的首次匹配的绝对路径(带有扩展名):
import os
def get_fullpath(path_wo_ext):
target_name = path_wo_ext.split(os.sep)[-1] # os.sep == "/" for your OS
folderpath = path_wo_ext.replace(target_name, '') # exclude name to get folderpath
filenames = sorted(os.listdir(folderpath)) # get all filenames w/ extensions,
# and sort for consistency
return [os.path.join(folderpath, name) for name filenames
if name in filename][0]
fullpath = get_fullpath("/Users/username/Desktop/song")
要返回所有匹配项,请删除[0]
答案 2 :(得分:0)
尽管Han Solo的答案似乎更好,但这是另一种方法。您可以迭代文件夹的内容并检查文件名是否与任何文件的开头匹配:
import os
FileNoExt = "/Users/username/Desktop/song"
directory, prefix = FileNoExt.rsplit('/',1)
for f in os.listdir(directory):
if f.starswith(prefix):
FileWithExt = os.path.join(directory,f)
break
注意:
这将仅包含以前缀开头的文件,但扩展名前可能包含其他字符,并且一旦找到一个匹配项便会中断。如果希望所有文件都带有前缀,则可以将每个匹配的大小写追加到列表中。您还可以使用endswith
检查特定的扩展名。