【问题标题】:How to 'raw text' a variable in Python?如何在 Python 中“原始文本”变量?
【发布时间】:2015-09-30 15:09:56
【问题描述】:

我正在openpyxl 打开一个工作簿:

wb = load_workbook(r'seven.xlsx', data_only=True)

电子表格的名称并不总是事先知道的,因此我需要重写此硬编码以允许变量,同时仍保持r?

如果我的变量名是 sheet,那么:

wb = load_workbook(sheet, data_only=True)

将省略r

显然我做不到:

wb = load_workbook(r'sheet', data_only=True)

我们如何实现将 r 添加到变量/如何在 r'' 中包装一个变量?

【问题讨论】:

  • 你的问题没有任何意义。 r 仅适用于 字符串文字
  • 这个问题非常有道理 - 有时您希望将配置从文本文件加载到进程中,并且在某些情况下,该文本可能包含“棘手”字符。例如,假设您要解析来自 json 的正则表达式集合,或用于某些参数化搜索的旧式 .ini 文件。在某些时候,您必须对已清理的字符串进行解码,以将其转回正则表达式编译器可以解析的“热”字符串。

标签: python string python-2.7 rawstring


【解决方案1】:

你的问题毫无意义。 r 前缀表示后面的字符串文字中的反斜杠序列将按字面解释而不是 escape sequences。如果您已经有一个字符串变量,那么该变量的内容已经正确设置。

【讨论】:

  • 我邀请您在 Windows 机器上尝试 openpyxl.save() 获取不包含反斜杠并省略 r'' 的文件名(例如上面的示例)。
  • 我认为有问题的示例没有添加任何上下文(它是 openpyxl.loadworkbook(),但实际上它可能是需要原始字符串但我想传递一个变量的任何内容。在这里它反正是:stackoverflow.com/questions/31362887/…
  • 你一定是误诊了问题。 r'all_done.xlsx''all_done.xlsx' 完全相同 相同,因为字符串文字中没有反斜杠。如果它无法写入文件,那么原因一定是其他原因。如果我不得不推测,也许“无效模式”部分是相关的——也许你没有对当前目录的写权限?
  • @SiHa 文档没有说我必须使用r''。 Windows 上的经验表明我愿意。
  • Experience is no substitute for reasoning. r 前缀只是为了让您可以编写r'C:\some\path\to\an.xlsx',这比等效的'C:\\some\\path\\to\\an.xlsx' 更简洁。
【解决方案2】:

我真的不明白你想要做什么,但如果你有一个字符串并且你想创建一个原始文本,我知道有两种主要方法:
raw_text = [str_text]

str_text = "%r"%str_text
raw_text = str_text[1:-1]

【讨论】:

  • 这行得通,只是拯救了我的夜晚。但是你能解释一下它是如何工作的吗?我从未见过这样的字符串操作。我使用的是 Python 3.7,所以它可能来自旧版 Python?
猜你喜欢
  • 2022-07-06
  • 2017-11-26
  • 2014-10-14
  • 2012-09-03
  • 2013-02-09
  • 2021-02-28
  • 2021-12-03
  • 1970-01-01
相关资源
最近更新 更多