【发布时间】:2018-01-24 21:51:02
【问题描述】:
我有一个包含字符串和数字元素的元组,我试图用转义逗号替换元组元素之一中存在的逗号,例如输入如下所示
('', '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 文件,所以当管道的下一步读取文件时,它会在 'like 之间的逗号处拆分文件' 和 'cookies' 即使我不想要它。我无法修改管道下游部分的代码,因此无法切换到分号或制表符分隔的文件,也无法更改。
我试图做的是使用列表理解来解决这个问题,如下所示
line = map(lambda x: str.replace(x, '"', '\"'), line)
但这会产生一个类型错误,指示替换需要一个字符串对象,但它收到了一个长字符串。
我能想到的唯一解决方案是将元组分解为单个元素,修改包含逗号的元素,然后构建一个新元组并将每个元素重新附加,但似乎有成为一种更 Pythonic 的方式来做到这一点。
谢谢!
【问题讨论】:
-
你有一个元组而不是一个列表,其次你能给出一个清楚的例子来说明你有什么作为输入和你想要什么作为输出吗?
-
如果您将字段用双引号引起来,您确定下游不会正确解析它吗?
-
我刚刚检查过,如果我将字段括在双引号中,我确信它不会正确解析。
-
如果您要输出到
.csv,您使用的是 Python 的 csv 模块吗?如果您适当地设置它的quoting属性,它应该会为您处理这个问题 - 默认情况下,它设置为引用行为,将引用包含分隔符的字符串,但如果您将其设置为QUOTE_NONE并设置了转义字符会使用它。 -
不,我会试试的。