我正在尝试加入python中的一个列表,该列表包含多个字符串,其中一些字符串中包含\t和\n字符以创建字符串。
假设我的列表如下:
ll = ['list', 'of', 'tstrings', 'ntwith', 'newline', 'tcharacters']
ss = ':::'.join(ll)
print ss
使用格式化的字符打印ss:
list:::of::: strings:::
with:::newline::: characters
而我想打印的是:
'list:::of:::tstrings:::ntwith:::newline:::tcharacters'
我试过:
ss =[]
for l in ll:
ss.append(repr(l))
ss = ':::'.join(ll)
其作用与上述相同
和:
ss = ''
for l in ll:
ss += (repr(l)) + ':::'
print ss.strip(':::')
接近但打印:
'list':::'of':::'tstrings':::'ntwith':::'newline':::'tcharacters'
我又尝试了一些技巧,但似乎没有一个能满足我的需要。
我之所以需要它,就像上面一样,是因为我正在为稍后在另一台机器上调用的脚本编写CL参数。将列表作为CL参数传递是行不通的,所以我打算将列表作为字符串(由":::"连接)传递,然后在另一张幻灯片上,使用"::"将其拆分回列表。当只在原始列表上使用join和split时,这是有效的,但是当我使用硬编码的CL参数调用python脚本时会抛出一个错误,因为在列表转换的字符串参数中有换行符。最后一个例子在传递到第二台机器时有效,但当我将其拆分时,它给了我这个列表:
["'list'", "'of'", "'\tstrings'", "'\n\twith'", "'newline'", "'\tcharacters'"]
我需要什么时候:
['list', 'of', 'tstrings', 'ntwith', 'newline', 'tcharacters']
更新:我尝试了下面的所有建议和更多建议,但仍然无法解决,所以现在我只是将列表转储到第一台服务器上的一个文本文件中,传递文件名而不是列表,然后将文本文件读取到第二台服务器的列表中。希望这个变通办法能奏效,但我仍在寻找更好的方法。
连接的字符串已经符合您的要求。您可以通过打印其表示形式来确认:
ll = ['list', 'of', 'tstrings', 'ntwith', 'newline', 'tcharacters']
ss = ':::'.join(ll)
print repr(ss)
# 'list:::of:::tstrings:::ntwith:::newline:::tcharacters'
给定第一个代码中的ss
:
print ss.encode("string_escape")
(或者可能是"unicode_escape",如果有任何可能的非ASCII字符)
如果除了将制表符和换行符作为参数传递给其他系统之外,您实际上不想要其他任何东西,那么您可能应该使用原始字符串(r"ntwith"
)来防止所有代码被解释为转义码。
不需要进行数据转换,这些转换没有任何目的,您只需撤消即可。