Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使用列表理解在包含字符串和数字的列表中用转义逗号替换逗号_Python_List Comprehension - Fatal编程技术网

Python 如何使用列表理解在包含字符串和数字的列表中用转义逗号替换逗号

Python 如何使用列表理解在包含字符串和数字的列表中用转义逗号替换逗号,python,list-comprehension,Python,List Comprehension,我有一个元组,其中包含字符串和数字元素,我试图用转义逗号替换元组中一个元素中存在的逗号,例如,输入如下所示 ('', '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 I

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

('', '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”和“cookies”之间的逗号处分割文件,即使我不希望这样做。我无法修改管道下游部分的代码,因此无法切换到分号或制表符分隔的文件,并且无法更改

我试着用列表理解来解决这个问题,如下所示

line = map(lambda x: str.replace(x, '"', '\"'), line)
但这会生成一个类型错误,指示replace需要一个string对象,但它收到了一个长字符串

我能想到的唯一解决方案是将元组分解为单独的元素,修改包含逗号的元素,然后构建一个新的元组并将每个元素追加回去,但似乎必须有一种更具python风格的方法来做到这一点


谢谢

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

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

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]

在对元素调用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
    ]

你有一个元组而不是一个列表,第二,你能给出一个清楚的例子,说明你有什么作为输入,什么作为输出吗?你确定如果你用双引号括起字段,下游将不能正确解析它吗?我刚刚检查过,我确定如果我用双引号括起字段,下游将不能正确解析。如果你要输出到
.csv
,您正在使用Python的csv模块吗?如果您适当地设置了它的
quoting
属性,它应该为您解决这个问题-默认情况下,它被设置为引用包含分隔符的字符串的引用行为,但是如果您将它设置为
quote\u NONE
并设置了转义字符,它将使用它。否,我试试看。下次请在代码行前面用4个空格格式化代码。如果您愿意,您可以突出显示您的代码,然后点击
ctrl
+
k
,确认已在接受的答案中逐字显示(请参见代码的最后一行)。