我想获得一个指向目录树中某处的任意文本文件(带有 .txt 后缀)的路径。该文件不应隐藏或隐藏在目录中。
我试着编写代码,但看起来很麻烦。你会如何改进它以避免无用的步骤?
def getSomeTextFile(rootDir):
"""Get the path to arbitrary text file under the rootDir"""
for root, dirs, files in os.walk(rootDir):
for f in files:
path = os.path.join(root, f)
ext = path.split(".")[-1]
if ext.lower() == "txt":
# it shouldn't be hidden or in hidden directory
if not "/." in path:
return path
return "" # there isn't any text file
答案 0 :(得分:3)
使用os.walk
(在您的示例中)绝对是一个好的开始。
您可以使用fnmatch
(link to the docs here)来简化其余代码。
E.g:
...
if fnmatch.fnmatch(file, '*.txt'):
print file
...
答案 1 :(得分:2)
我使用fnmatch而不是字符串操作。
import os, os.path, fnmatch
def find_files(root, pattern, exclude_hidden=True):
""" Get the path to arbitrary .ext file under the root dir """
for dir, _, files in os.walk(root):
for f in fnmatch.filter(files, pattern):
path = os.path.join(dir, f)
if '/.' not in path or not exclude_hidden:
yield path
我还将函数重写为更通用(和“pythonic”)。要获得一个路径名,请将其命名为:
first_txt = next(find_files(some_dir, '*.txt'))