【问题标题】:How can I use list comprehension to replace a comma with an escaped comma in a list that contains strings and numbers如何使用列表推导在包含字符串和数字的列表中用转义逗号替换逗号
【发布时间】: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 并设置了转义字符会使用它。
  • 不,我会试试的。

标签: python list-comprehension


【解决方案1】:

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

如果您想将所有逗号更改为转义逗号,不妨试试这个:

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]

【讨论】:

  • 请在下一次格式化您的代码,在代码行前留 4 个空格。如果您愿意,只需突出显示您的代码并点击ctrl+k
【解决方案2】:

您可能希望在对其调用替换之前验证一个元素是否为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
    ]

【讨论】:

  • 该验证已经逐字出现在接受的答案中(参见他们代码的最后一行)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-12
  • 1970-01-01
  • 2016-02-09
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 2013-02-04
相关资源
最近更新 更多