【问题标题】:How to include keywords within fstring in python3 [closed]如何在python3的fstring中包含关键字[关闭]
【发布时间】:2021-12-11 06:13:37
【问题描述】:

我是python和fstring的新手,你能帮我如何用fstring将多行写入文件,它是创建一个配置文件,fstring中的所有内容都将写入文件,忽略内容有什么

    def create_testfile(self) -> None:
        """writes the config file 
       """
    value = f""" #==================================
## NAT network DHCP params configuration
bridge=$(ifconfig | grep  "flags" | awk -F : '{print $1}' | sed '/lo/d' | sed '/vif/d')
echo "${command}"
case "${command}" in
    online)
...
...
...
        port_num_check
esac
"""
    with open("network.txt", "w") as network:
        network.write(value)

给出错误信息 文件“”,第 1 行 (打印 1 美元) ^ SyntaxError: 无效语法

我尝试将三引号字符串更改为单引号字符串,但还有另一个问题,添加 \n 将导致错误消息。 SyntaxError: f-string 表达式部分不能包含反斜杠

【问题讨论】:

  • 你试过用.format()代替f-string吗?
  • 这能回答你的问题吗? Multiline f-string in Python
  • 你需要转义你的{print $1} -> {{print $1}}
  • 你为什么还要使用 f-string?您似乎不想执行任何替换。
  • 谢谢,不要使用 f-string 是有道理的。我遵循了一些示例并使用了 fstring。

标签: python python-3.x pycharm python-3.6 f-string


【解决方案1】:

您在不需要的地方使用 f 字符串。你只需要一个多行字符串。您得到的错误是因为 f 字符串的工作方式。

花括号 {} 中的所有内容都被视为 Python 中的变量,而不是您希望将其视为的内容,只是一个普通字符串。

其中一个解决方案就是不要像我之前所说的那样使用 f 字符串。

其他解决方案是转义大括号,这样它们就不会用作变量的转义序列。您可以再次用一对大括号围绕现有的{...} 来做到这一点。所以{...}应该写成{{...}}

在任何你希望 shell 脚本中的命令在 shell 脚本中被视为变量但在 python 中不被视为变量的地方执行此操作。

准确地修改你的程序如下

def create_testfile(self) -> None:
        """writes the config file 
       """
    value = f""" #==================================
## NAT network DHCP params configuration
bridge=$(ifconfig | grep  "flags" | awk -F : '{{print $1}}' | sed '/lo/d' | sed '/vif/d')
echo "${{command}}"
case "${{command}}" in
    online)
...
...
...
        port_num_check
esac
"""
    with open("network.txt", "w") as network:
        network.write(value)

请注意,在您的问题中,语法突出显示如何将大括号内的文本视为变量,但在上面的代码中,它被视为字符串。

一些关于 f-strings 的阅读内容:

  1. Real Python's Article
  2. PEP 498 -- Literal String Interpolation

【讨论】:

    【解决方案2】:

    您的 f 字符串表达式中不能有 $ 符号。我认为在这种情况下,最好是逐行执行此操作,然后使用 "\n".join(lines) 将它们连接在一起

    如果您真的想将所有内容都放在一个字符串中,那么您可以使用反斜杠 () 来忽略字符。

    【讨论】:

      猜你喜欢
      • 2022-01-13
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-29
      相关资源
      最近更新 更多