从 Python 标准库文档中提取开放内置函数:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
...文件是一个字符串或字节对象,给出要打开的文件的路径名(绝对或相对于当前工作目录)...
明确地说, open 不会带来任何东西来自动查找文件:如果路径不是绝对的,则仅在当前目录中搜索。
因此,您将不得不为此使用自定义函数或自定义类。例如:
class path_opener(object):
def __init__(self, path = [.]):
self.path = path
def set(self, path):
self.path = path
def append(self, path):
self.path.append(path)
def extent(self, path):
self.path.extend(path)
def find(self, file):
for folder in self.path:
path = os.path.join(folder, file)
if os.path.isfile(path):
return path
raise FileNotFoundError()
def open(self, file, *args, **kwargs):
return open(self.find(file), *args, **kwargs)
这意味着文件打开器将保留自己的路径,默认情况下将使用当前路径进行初始化,将具有设置、附加或扩展其路径的方法,并且通常会引发 FileNotFoundError is a file is not found in any of the在其路径中列出的目录。
用法 :
o = path_opener(['~/.foo-config/', '/usr/local/myapp/foo-config/'])
with o.open('foo') as fd:
...