我正在尝试格式化python中的字符串,该字符串将参数作为名称列表中的项目。 问题是,我想用双引号和反斜杠打印所有列表项,并且只在同一个字符串中一个接一个地打印。 代码是:
list_names=['Alex', 'John', 'Joseph J']
String_to_pring='Hi my name is (\\"%s\\")'%(list_names)
输出应如下所示:
'Hi my name is (\"Alex\",\"John\",\"Joseph J\")'
但相反,我一直这样:
'Hi my names is (\"['Alex','John','Joseph J']\")'
我甚至尝试过使用.format()
和json.dumps()
,但结果仍然相同。
有没有办法打印所需的输出,或者我一次只能打印每个列表项吗?
答案 0 :(得分:2)
在不改变代码的情况下,您可以简单地格式化已转换为元组的列表的repr
表示。
# proper way - this is what you actually want
list_names = ['Alex', 'John', 'Joseph J']
string_to_print = 'Hi my name is %s' % (repr(tuple(list_names)))
print(string_to_print)
# Hi my name is ('Alex', 'John', 'Joseph J')
如果你想获得确切的输出,只需要更换一些字符串:
# improper way
list_names = ['Alex', 'John', 'Joseph J']
string_to_print = 'Hi my name is %s' % (repr(tuple(list_names)).replace("\'", '\\"'))
print(string_to_print)
# Hi my name is (\"Alex\", \"John\", \"Joseph J\")
如果您尝试将string_to_print
传递到其他地方,请先尝试正确的方法,它可能实际上适合您。
如果你足够谨慎,你会发现以前的不正确的方式"包含一个小错误,请尝试将"Alex's house"
添加到list_names
中,输出将如下所示:
Hi my name is (\"Alex\", \"John\", \"Joseph J\", "Alex\"s house")
要处理该错误,您需要使用re.sub()
更好的替换方法。
from re import sub
list_names = ['Alex', 'John', 'Joseph J', "Alex's house"]
string_to_print = 'Hi my name is %s' % (sub(r'([\'\"])(.*?)(?!\\\1)(\1)', r'\"\2\"', repr(tuple(list_names))))
print(string_to_print)
但是如果你在使用过程中不会发生这样的事情,我建议继续使用"不正确的方式"因为它更简单。
答案 1 :(得分:0)
没有将列表格式化为人性化字符串的功能您必须自己格式化列表:
list_names = ['Alex', 'John', 'Joseph J']
String_to_pring='Hi my name is (\\"{}\\")'.format('\\",\\"'.join(i for i in list_names))
# Hi my name is (\"Alex\",\"John\",\"Joseph J\")
答案 2 :(得分:0)