我有一个包含字符串和数字元素的元组,我试图用转义的逗号替换存在于元组的一个元素中的逗号,例如输入如下所示
('', '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)
我想要做的是用/之后替换,因为我将内容输出到csv文件,所以当管道的下一步读取文件时,它会以逗号分隔文件'像'和' cookies'即使我不想要它。我无法修改管道下游部分的代码,因此我无法切换到分号或制表符分隔文件,我无法更改。
我尝试做的是使用列表理解来解决这个问题,如下所示
line = map(lambda x: str.replace(x, '"', '\"'), line)
但是会生成一个类型错误,指示replace需要一个字符串对象,但它收到了一个long。
我能想到的唯一解决方案是将元组分解为单个元素,修改包含逗号的元素,然后构建一个新元组并重新附加每个元素,但它似乎必须有更多的pythonic方式来做到这一点。
谢谢!
答案 0 :(得分:3)
我认为列表理解最适合为每个元素应用规则;如果您知道要更改哪个单个字符串,为什么不能只更改那个单个字符串?
如果您想将所有逗号更改为转义逗号,可以尝试一下:
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]
答案 1 :(得分:0)
您可能希望在调用replace之前验证元素是str
实例。
类似的东西:
data = (
'',
'i_like_cats',
'I like, cookies',
10319708L,
"* / Item ID='10319708'",
'i_wish_was_an_oscar_meyer_weiner',
0.101021321,
)
line = [
x.replace(",", "\,") if isinstance(x, str) else x for x in data
]