其他分享
首页 > 其他分享> > 我如何使用列表推导用包含字符串和数字的列表中的转义逗号替换逗号

我如何使用列表推导用包含字符串和数字的列表中的转义逗号替换逗号

作者:互联网

我有一个包含字符串和数字元素的元组,并且我试图用转义的逗号替换元组元素之一中存在的逗号,例如输入如下所示

('', 'i_like_cats', 'I like, cookies', 10319708L, "* / Item ID='10319708'", 'i_wish_was_an_oscar_meyer_weiner',
0.101021321)

我想要的输出是

('', 'i_like_cats', 'I like\, cookies', 10319708L, "* / Item ID='10319708'", 'i_wish_was_an_oscar_meyer_weiner',
0.101021321)

我想做的是将like之后的/替换为/,因为我正在将内容输出到一个csv文件中,因此,当管道的下一步读取文件时,它会以逗号分隔“ like”和“饼干”,即使我不想这么做.我无法修改管道下游部分的代码,因此无法切换到以分号或制表符分隔的文件,也无法更改.

我试图做的是使用列表理解来解决此问题,如下所示

line = map(lambda x: str.replace(x, '"', '\"'), line)

但这会产生类型错误,指示替换需要一个字符串对象,但接收到一个long.

我能想到的唯一解决方案是将元组分解为单独的元素,修改包含逗号的元素,然后构建一个新的元组并附加每个元素,但是似乎必须有一个更多使用pythonic的方式.

谢谢!

解决方法:

我认为列表理解最适合对每个元素应用规则.如果您知道要更改的单个字符串,为什么不能只更改单个字符串呢?

如果要将所有逗号更改为转义逗号,请尝试以下操作:

strtuple = ('', 'i_like_cats', 'I like, cookies', 10319708, "* / Item ID='10319708'", 'i_wish_was_an_oscar_meyer_weiner',
0.101021321)
converted_strlist = [i.replace(',', '\\,') if isinstance(i, str) else i for i in strtuple]

标签:python,list-comprehension
来源: https://codeday.me/bug/20191110/2013414.html