如何将字符串转换为f字符串? - python

我正在阅读有关python新的f字符串的blog,它们看起来确实很整洁。但是,我希望能够从字符串或文件中加载f字符串。

我似乎找不到任何执行此操作的字符串方法或其他函数。

从上面我的链接中的示例:

name = 'Fred'
age = 42
f"My name is {name} and I am {age} years old"

'My name is Fred and I am 42 years old'

但是,如果我有一个字符串s怎么办?我希望能够像这样eff-ify s:

name = 'Fred'
age = 42
s = "My name is {name} and I am {age} years old"
effify(s)

事实证明,我已经可以执行类似于str.format的操作并获得性能提高。即:

format = lambda name, age: f"My name is {name} and I am {age} years old"
format('Ted', 12)

'My name is Ted and I am 12 years old'

参考方案

f字符串是代码。不仅以安全的方式(当然,字符串文字就是代码),而且以危险的任意代码执行方式。这是有效的f字符串:

f"{__import__('os').system('install ransomware or something')}"

并且在评估时将执行任意的shell命令。

您在问如何获取从文本文件加载的字符串并将其评估为代码,答案归结为eval。当然,这是安全风险可能是个坏主意,所以我建议不要尝试从文件中加载f字符串。

如果要从文件加载f字符串f"My name is {name} and I am {age} years old",则实际上将

f"My name is {name} and I am {age} years old"

在文件中,添加f和引号等。

从文件中读取它,进行编译并保存(因此eval不必每次都重新编译):

compiled_fstring = compile(fstring_from_file, '<fstring_from_file>', 'eval')

并使用eval进行评估:

formatted_output = eval(compiled_fstring)

如果这样做,请非常注意从中加载f字符串的来源。

python JSON对象必须是str,bytes或bytearray,而不是'dict - python

在Python 3中,要加载以前保存的json,如下所示:json.dumps(dictionary)输出是这样的{"('Hello',)": 6, "('Hi',)": 5}当我使用json.loads({"('Hello',)": 6,…

在返回'Response'(Python)中传递多个参数 - python

我在Angular工作,正在使用Http请求和响应。是否可以在“响应”中发送多个参数。角度文件:this.http.get("api/agent/applicationaware").subscribe((data:any)... python文件:def get(request): ... return Response(seriali…

字符串文字中的正斜杠表现异常 - python

为什么S1和S2在撇号位置方面表现不同?S1="1/282/03/10" S2="4/107/03/10" R1="".join({"N\'" ,S1,"\'" }) R2="".join({"N\'…

Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…

Python uuid4,如何限制唯一字符的长度 - python

在Python中,我正在使用uuid4()方法创建唯一的字符集。但是我找不到将其限制为10或8个字符的方法。有什么办法吗?uuid4()ffc69c1b-9d87-4c19-8dac-c09ca857e3fc谢谢。 参考方案 尝试:x = uuid4() str(x)[:8] 输出:"ffc69c1b" Is there a way to…