【问题标题】:How to open file as formatted string?如何以格式化字符串形式打开文件?
【发布时间】:2019-09-30 15:57:43
【问题描述】:

我有一系列文件,里面有很多以{myvar} 形式定义的变量。例如

文件.txt

This is {myvar}.

我想打开它们,并正常替换变量:

with open('path/to/file.txt', 'r') as file:
    myfile = file.read().replace('\n', '')


myvar='myself.'
print(f"{myfile}")

应该输出:

This is myself.

如何将文件作为格式化字符串打开?或者将字符串转换为格式化字符串?

【问题讨论】:

  • 您可以执行类似file.read().format(myvar='myself') 的操作,或者如果您希望将所有替换都放在一个字典中,例如replacements = {'myvar': 'myself'},然后是file.read().format(**replacements)。如果你想使用变量名,那么file.read().format(**locals())file.read().format(**globals())
  • 另外,请查看 Jinja2:jinja.pocoo.org/docs/2.10。这是一个非常很好的模板语言
  • @jdehesa 您能否进一步解释一下.format(**locals())**globals() 的工作原理?我仍然需要使用您显示的字典,例如replacements,对吗?
  • @Sosi 不,locals()globals() 自己返回字典,因此 unpacking them with ** 将直接使它们作为基于关键字的替换。
  • @Sosi 我要给这个加注星标,今晚如果有人还没有回答的话,我会试着给你一个好的答案

标签: python python-3.x string file


【解决方案1】:

如果变量是调用的本地变量,这似乎有效,如果它是全局变量,请使用**globals()。您还可以将值放在以变量名作为键的字典中。

myvar = 'myself'
newline = '\n'  # Avoids SyntaxError: f-string expr cannot include a backslash

with open('unformatted.txt', 'r') as file:
    myfile = f"{file.read().replace(newline, '')}".format(**locals())

print(myfile)

【讨论】:

  • 在看到这个答案之前,我花了 30 分钟试图理解为什么一个工作示例很好(比如你给的那个),但是当我把它放在一个函数中时它不起作用。现在我明白为什么了:)
【解决方案2】:

你快到了。

假设存在“这是 {myvar}”。在 file.txt 中。

编码:

with open('path/to/file.txt', 'r') as file:
    myfile = file.read().replace('\n', '')

myvar='myself'

print(myfile.format(myvar=myvar))

任何纯文本格式的字符串,都可以作为变量从文本文件中导入。然后可以正常操作字符串变量。

在您的情况下,键是“{var}”。因此,只要定义了变量“varx”,就可以轻松使用“.format(var=varx)”。

输出:

这是我自己。

如果你想导入css样式的html模板并替换一些内容,你可以使用“{{”和“}}”来转义“{”和“}”。

示例 2 在文件中:

这是 {{var}} 的 {myvar}。

输出:

这是我自己的 {var}。

【讨论】:

    猜你喜欢
    • 2018-01-10
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 2012-10-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-10
    相关资源
    最近更新 更多