代码之家  ›  专栏  ›  技术社区  ›  Wyrmwood

有什么方法可以分解大括号内的f字符串吗?

  •  5
  • Wyrmwood  · 技术社区  · 7 年前

    >>> name = f"{os.path.splitext(os.path.basename('/some/long/path/I/donot/need/to/some/config.bs'))[0]}.yaml"
    'config.yaml'
    

    name = f"{os.path.splitext(os.path.basename(
        '/some/long/path/I/donot/need/to/some/config.bs'))[0]}.yaml"
    
    >>> f"{os.path.splitext(os.path.basename(
      File "<stdin>", line 1
        f"{os.path.splitext(os.path.basename(
                                            ^
    SyntaxError: EOL while scanning string literal
    

    我唯一能做的就是分解命令,比如:

    >>> fname = '/some/long/path/I/donot/need/to/some/config.bs'
    >>> tempname = os.path.splitext(os.path.basename(
    ...     fname))[0]
    >>> name = f'{tempname}.yaml'
    >>> name
    'config.yaml'
    

    有没有其他拆分f字符串的选项?

    1 回复  |  直到 7 年前
        1
  •  8
  •   Community CDub    4 年前

    是的,您仍然可以使用三引号字符串,并以您认为最好的任何方式将其拆分。

    From the PEP on f -strings :

    为了便于阅读,表达式中的前导和尾随空格被忽略。这是在求值之前将表达式括在括号中的副产品。

    name = f"""{
        os.path.splitext(
            os.path.basename('/some/long/path/I/donot/need/to/some/config.bs')
        )[0]}.yaml"""
    

    仍应产生预期结果。以你认为最好的方式编排。

    # not using fully qualified name
    from os.path import splitext, basename
    
    fname = '/some/long/path/I/donot/need/to/some/config.bs'
    name = f"{splitext(basename(fname))[0].yaml"
    

    最终由你选择。