如何将 Python 2 中的"{:<25}"格式修改为 3 升级



我正在尝试将此python2.7代码转换为python3.6

def write_to_zip(x, zf, vocab_start):
curr_name = "{0}_S{1}_{2}".format(x['study_name'], x['subject_id'], x['repeat_num'])
vocab_string = x[vocab_start:].to_string(header = False, index = False).replace('n','').encode("utf-8")
demo_string = ("{:<25}"*(vocab_start)).format(*x[0:vocab_start].replace(r'', np.nan, regex=True))
print(demo_string)
string_to_write = demo_string + vocab_string
zf.writestr("{}.txt".format(curr_name), string_to_write)

但是我收到以下错误demo_string = ("{:<25}"*(vocab_start)).format(*x[0:vocab_start].replace(r'', np.nan, regex=True))

("传递给NoneType.__format__的不支持的格式字符串","发生 在索引 0'(

x看起来像这样:

study_name                 English L1
subject_id                          2
repeat_num                          1
completed                        True
last_modified    2019-08-05 06:57 UTC

并生成demo_string

English L1               2                        1                        1                        2019-08-05 06:57 UTC

本示例中的vocab_start= 34

在 Python3 中,我应该用什么替换 {:<25} 以获得相同的结果?

更改在于将格式字符串应用于未实现__format__的类型的方式。在您的情况下,您的x列表中包含None。您可以删除任何None(或替换它们(,也可以强制将所有参数格式化为字符串。

# Convert `None` values
demo_string = ("{:<25}"*(vocab_start)).format(*('None' if value is None else value for value in x[0:vocab_start].replace(r'', np.nan, regex=True)))
# Force everything to be converted to a string before formatting (with !s)
demo_string = ("{!s:<25}"*(vocab_start)).format(*x[0:vocab_start].replace(r'', np.nan, regex=True))

铌。我不知道 numpy,所以很可能有更好的方法来实现第二个选项。

最新更新