如何写长篇小说操作系统路径连接在遵守PEP8的同时

2024-04-18 12:32:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一个长链os.path.join()来生成一个路径(它确保该路径可以在任何操作系统上工作)。你知道吗

"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 autofix所做的,我得到了line too long错误。你知道吗

如果在这种情况下不可能修复PEP8错误,我仍然想知道你会怎么做!你知道吗


Tags: path路径configbaseos错误dirline
2条回答

pathlib模块将允许您以一种有趣且灵活的方式链接事物。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模块或pathlibjoinpath,则不必嵌套联接,一个就足够了。你知道吗

path = os.path.join(*[BASE_DIR, "ServiceProvider", "config", "metadata", "gmail_metadata.xml"])
# or
path = pathlib.Path("BASE_DIR").join(*["ServiceProvider", "config", "metadata", "gmail_metadata.xml"])

您可以列出所有要加入的路径,并使用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)

相关问题 更多 >