簡體   English   中英

如何使用列表推導將逗號替換為包含字符串和數字的列表中的轉義逗號

[英]How can I use list comprehension to replace a comma with an escaped comma in a list that contains strings and numbers

我有一個包含字符串和數字元素的元組,我試圖用轉義的逗號替換存在於元組的一個元素中的逗號,例如輸入如下所示

('', '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'和'之間用逗號分隔文件餅干'即使我不想要它。 我無法修改管道下游部分的代碼,因此我無法切換到分號或制表符分隔文件,我無法更改。

我試圖做的是使用列表理解來解決這個問題如下

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

但是這會生成一個類型錯誤,指示replace需要一個字符串對象,但它收到了一個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]

您可能希望在調用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
    ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM