如何根据单引号字符分隔项目-即['a','b','x,d'] => a b'x,d'?

时间:2019-02-08 19:47:46

标签: python python-3.x

我正在解析一个csv文件并提取所有数据,并根据引号将它们分开。 为了简单起见,我从该文件中随机抽取一条

输入:

line = "'abc', 'sxy', 'lmo,por','zz'"

所需的输出:

abc
sxy
'lmo,por'
zz

所需输出中的第3行是我很讨厌代码的地方。如果我执行replace(“'”,“”),那么我将丢失所有引号并分开。 我不确定如何在不丢失单引号的情况下将第3行的值合并在一起,而我需要去除其他单引号 是否有python内置的字符串函数呢?

我不确定谁可以编写正则表达式,因为我对正则表达式解析非常陌生。

到目前为止,我的代码:

line = "'abc', 'sxy', 'lmo,por','zz'"

def parse(line):
    line = line.replace("'","")
    a = line.split(',')
    for word in a:
        l.append(word)
    print(l)

我知道这很琐碎,但是我无法解决。 SO也没有类似的情况。 感谢任何可以帮助我的指针。

2 个答案:

答案 0 :(得分:4)

python csv软件包具有一个quotechar参数,我认为它将满足您的需求。作为一般的经验法则,请不要通过自己解析所有内容来与csv文档发生冲突,并且请勿使用正则表达式。

看看documentationrelative discussion

这应该可以解决问题(我想您必须解析多行)。

lines = """ 'abc', 'sxy', 'lmo,por','zz'
'some,thing', 'some', thing""".splitlines()

for l in  csv.reader(lines, quotechar="'", delimiter=',', 
                    quoting=csv.QUOTE_ALL, skipinitialspace=True):
    print(l)

# ['abc', 'sxy', 'lmo,por', 'zz']
# ['some,thing', 'some', 'thing']

答案 1 :(得分:3)

尝试这个简单的方法:

line = "'abc', 'sxy', 'lmo,por','zz'"

def parse(line):
    li = []
    lines = line.split("',")
    for line in lines:
        word = line.replace("'", "").strip()
        print (word)
        li.append(word)
    return li

首先用'分隔,然后删除所有空格和单引号