【问题标题】:unable to get a variable into a list无法将变量放入列表
【发布时间】:2014-12-18 21:59:53
【问题描述】:

但是,我有以下代码,最后一个 "_36.0_sumoprce.txt" 是唯一一个获取日期,其他都没有。

dates = time.strftime("%Y%m%d")
files_to_remove = ("{!s}_23.0_sumoocop.txt","{!s}_36.0_sumoprce.txt", "{!s}_35.0_sumoeprc.txt".format(dates, dates, dates))

print(files_to_remove)

我目前看到的:

('{!s}_23.0_sumoocop.txt', '{!s}_36.0_sumoprce.txt', '20141218_35.0_sumoeprc.txt')

应该打印什么:

('20141218_23.0_sumoocop.txt', '20141218_36.0_sumoprce.txt', '20141218_35.0_sumoeprc.txt')

知道我做错了什么吗?

【问题讨论】:

  • 没有理由这样做!s,因为这是默认格式代码。只需使用{}
  • @iCodez:不,不是; !s 在对象上调用__format__ 之前应用str()。在 Python 3 中使用 '{}'.format(b'') 尝试,然后使用 '{!s}'.format(b'') 再次尝试。
  • @iCodez:例如,标准object.__format__() 不支持格式化程序,因此'{:20}'.format(b'') 失败,但'{!s:20}'.format(b'') 成功。 object.__format__() 返回str(self),但不会让您应用格式化程序。 '{!s:20}'.format(b'') 将字节对象转换为字符串首先,然后应用格式化程序。
  • @iCodez:(是的,'{}'.format(b'') 有效,因为没有格式化指令,这是我的错误)。

标签: python python-3.x


【解决方案1】:

您需要在每个字符串上分别调用str.format();您没有在前两个字符串上调用它:

files_to_remove = (
    "{!s}_23.0_sumoocop.txt".format(dates),
    "{!s}_36.0_sumoprce.txt".format(dates),
    "{!s}_35.0_sumoeprc.txt".format(dates)
)

或者您可以使用列表压缩:

files_to_remove = ("{!s}_23.0_sumoocop.txt", "{!s}_36.0_sumoprce.txt", "{!s}_35.0_sumoeprc.txt")
files_to_remove = [s.format(dates) for s in files_to_remove]

注意!s 在这里完全是多余的,因为dates 已经是一个字符串对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2017-07-01
    相关资源
    最近更新 更多