如何将Python中的逗号分隔字符串转换为包含逗号的列表?

4
我有一个由逗号分隔的字符串。每个项都用引号(")括起来,但这些项也可能包含逗号(,)。因此,使用split(',') 会产生问题。
如何在Python中正确分割此文本?
以下是这种字符串的示例: "coffee", "water, hot" 我想要实现的效果是: ["coffee", "water, hot"]

你能展示一些更多的例子来说明你所寻找的吗? - Dennis
1
@Dennis 当然可以,但在此之前,我已经更新了问题并说明了我想要实现的结果。这有帮助吗? - stackyname
1
@Dennis 现在我看到了例子和结果,我想我只需要在字符串中添加 [] 并转换为列表?哈哈,我会尝试一下。 - stackyname
1
这个回答解决了你的问题吗?如何在Bash中使用分隔符拆分字符串? - Kaneki21
1
@Kaneki21 谢谢你的建议。它将项目拆分为单独的列表,并且单个项目中没有冲突的分隔符。所以不幸的是,那不是答案。 - stackyname
6个回答

3
您可以根据包含多个字符的分隔符进行拆分。 '"coffee", "water, hot"'.split('", "') 将得到 ['"coffee','water, hot"']。 从那里,您可以删除初始和终止引号。

我其实也考虑过并尝试了这个方法,但感觉有点丑陋,并且在处理大量数据时可能会破坏某些东西。不过还是谢谢您,如果找不到更好的方法,我就用这个了。 - stackyname
2
如果“coffee”是“, ”,那么你会分割错误。不过,诚然这种情况似乎不太可能发生。 - Kelly Bundy

2
import ast

s = '"coffee", "water, hot"'

result = ast.literal_eval(f'[{s}]')

print(result)

更新:当文本未被引号(")包围时,此方法无法正常工作。会提示“语法无效”错误。 - stackyname
@stackyname 在执行 eval 前检查引号非常容易。在我看来,这是所有答案中最完整的一个。 - Cow
@user56700 谢谢。如果没有引号,你建议怎么做? - stackyname
@stackyname 一如既往:查找使用的格式,然后使用相应的解析器。这次我实际上没有完全这样做,因为我正在猜测它是否适合 literal_eval,但是我对之前许多回答做出更糟糕的 hack 感到不满。无论如何,这个问题说“每个项目都用引号括起来”,所以如果您想询问其他格式,请提出另一个问题。 - Kelly Bundy
@KellyBundy 是的,你说得对。这是一个不同的话题。只是想知道是否有解决方案。再次感谢。 - stackyname

1

您可以使用 re.findall

import re

s = '"coffee", "water, hot"'
re.findall('"(.*?)"', s) # ['coffee', 'water, hot']

字符串中包含引号并不罕见,通常使用转义符号 \" ,你可以进行匹配。 - Kelly Bundy

0
首先,我定义了一个名为 'del_quote' 的函数来删除不必要的引号和空格。 然后,我使用 '",' 作为分隔符进行了拆分。结果被映射以删除引号并转换为列表。
def del_quote(s):
return s.replace('"','').strip()

x='"coffee", "water, hot"'
result=list(map(del_quote,x.split('",')))
print(result)

0

你几乎可以使用 CSV 来完成这个任务:

import csv
from io import StringIO
sio = StringIO()
sio.write('"coffee", "water, hot"')
sio.seek(0)
reader = csv.reader(sio)
print(next(reader))
# Prints ['coffee', ' "water', ' hot"']

问题在于“水,热”之前有一个空格。如果你用","替换'","',那么csv就可以工作了,你将得到['coffee','水,热']。

-1

这样怎么样:

string = '"coffee", "water, hot"'

stringList = string.split("'")

string = stringList[0]

print(string)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接