![](/img/trans.png)
[英]How can I process a list of strings where each string may be a comma-separated list of strings as well?
[英]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.