如何在遵守 PEP8 的同时编写长 os.path.join 链
How to write a long os.path.join chain while complying to PEP8
我正在使用 os.path.join() 的长链来生成路径(它确保该路径适用于任何 OS)。
"metadata": os.path.join(BASE_DIR, os.path.join('ServiceProvider',os.path.join('config', os.path.join('metadata',os.path.join('gmail_metadata.xml'))))),
我想按照 PEP8 的方式将它分解成多行,但我似乎做不到。
我尝试了几种方法:
"metadata": os.path.join(BASE_DIR,
os.path.join('ServiceProvider',
os.path.join('config',
os.path.join('metadata',
os.path.join('gmail_metadata.xml'))))),
会得到 PEP8 错误 continuation line under-indented for visual indentpep8(E128)
和
"metadata": os.path.join(BASE_DIR, os.path.join('ServiceProvider',
os.path.join('config', os.path.join('metadata',
os.path.join('gmail_metadata.xml'))))),
这实际上是 PEP8 自动修复所做的,我收到 line too long
错误。
如果在这种情况下无法修复 PEP8 错误,我仍然想知道你会怎么做!
您可以列出要加入的所有路径,并使用 list-unpacking(PEP-3132 中的更多详细信息解压缩所有参数并将其传递给 os.path.join
import os
#List of paths
li = [BASE_PATH,'ServiceProvider', 'config', 'metadata','gmail_metadata.xml']
#Join all paths by unpacking the list
path = os.path.join(*li)
print(path)
pathlib module will allow you to chain things in an interesting and flexible way. Lovely tutorial here
import pathlib
# use / operator
path = pathlib.Path("BASE_DIR")
path /= "ServiceProvider" / "config" / "metadata" / "gmail_metadata.xml"
# or
path = pathlib.Path("BASE_DIR") / "ServiceProvider" / "config" / "metadata" / "gmail_metadata.xml"
# or
path = pathlib.Path("BASE_DIR") /
"ServiceProvider" /
"config" /
"metadata" /
"gmail_metadata.xml"
如果你想使用 os.path
模块中的 joinpath
或 pathlib
那么你不必嵌套连接,一个就足够了。
path = os.path.join(*[BASE_DIR, "ServiceProvider", "config", "metadata", "gmail_metadata.xml"])
# or
path = pathlib.Path("BASE_DIR").joinpath(*["ServiceProvider", "config", "metadata", "gmail_metadata.xml"])
我正在使用 os.path.join() 的长链来生成路径(它确保该路径适用于任何 OS)。
"metadata": os.path.join(BASE_DIR, os.path.join('ServiceProvider',os.path.join('config', os.path.join('metadata',os.path.join('gmail_metadata.xml'))))),
我想按照 PEP8 的方式将它分解成多行,但我似乎做不到。
我尝试了几种方法:
"metadata": os.path.join(BASE_DIR,
os.path.join('ServiceProvider',
os.path.join('config',
os.path.join('metadata',
os.path.join('gmail_metadata.xml'))))),
会得到 PEP8 错误 continuation line under-indented for visual indentpep8(E128)
和
"metadata": os.path.join(BASE_DIR, os.path.join('ServiceProvider',
os.path.join('config', os.path.join('metadata',
os.path.join('gmail_metadata.xml'))))),
这实际上是 PEP8 自动修复所做的,我收到 line too long
错误。
如果在这种情况下无法修复 PEP8 错误,我仍然想知道你会怎么做!
您可以列出要加入的所有路径,并使用 list-unpacking(PEP-3132 中的更多详细信息解压缩所有参数并将其传递给 os.path.join
import os
#List of paths
li = [BASE_PATH,'ServiceProvider', 'config', 'metadata','gmail_metadata.xml']
#Join all paths by unpacking the list
path = os.path.join(*li)
print(path)
pathlib module will allow you to chain things in an interesting and flexible way. Lovely tutorial here
import pathlib
# use / operator
path = pathlib.Path("BASE_DIR")
path /= "ServiceProvider" / "config" / "metadata" / "gmail_metadata.xml"
# or
path = pathlib.Path("BASE_DIR") / "ServiceProvider" / "config" / "metadata" / "gmail_metadata.xml"
# or
path = pathlib.Path("BASE_DIR") /
"ServiceProvider" /
"config" /
"metadata" /
"gmail_metadata.xml"
如果你想使用 os.path
模块中的 joinpath
或 pathlib
那么你不必嵌套连接,一个就足够了。
path = os.path.join(*[BASE_DIR, "ServiceProvider", "config", "metadata", "gmail_metadata.xml"])
# or
path = pathlib.Path("BASE_DIR").joinpath(*["ServiceProvider", "config", "metadata", "gmail_metadata.xml"])