【问题标题】:How separate items based on single quote charcters - i.e. ['a','b','x,d'] => a b 'x,d'?如何根据单引号字符分隔项目 - 即 ['a','b','x,d'] => a b 'x,d'?
【发布时间】:2019-07-03 02:23:39
【问题描述】:

我正在解析一个 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也没有类似的情况。 感谢任何可以帮助我的指针。

【问题讨论】:

  • 所以你想在所有情况下都删除单引号,除非中间有逗号?
  • 你能相信在分隔字符串的逗号后面有一个空格吗?例如'abc', 之后的逗号后有一个空格,但lmopor 之间没有空格
  • @puskin 是的,除非中间有逗号,否则我需要全部删除引号
  • csv 模块可能会处理它
  • @CharlieWindolf 我不能依赖空间,因为源文件是由第三方工具生成的,并且文件可能存在问题(空间可能不一致)

标签: python python-3.x


【解决方案1】:

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']

【讨论】:

  • 我用一个完整的例子更新了代码,这应该可以满足你的需要。它将分割每个逗号上的行,但不quotechar引用的逗号上。
  • 如果您确实需要在包含, 的值中保留',那么您可以遍历l 中的值,并引用任何包含, 的值。这仍然比使用正则表达式解析输入 IMO 更好。
【解决方案2】:

试试这个简单的:

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

先用'分割,去掉所有空格和单引号

【讨论】:

  • 如果您的文件中有一致的 ', 上述解决方案将起作用。如果存在数据问题并且缺少单引号,那么您的解决方案将不会涵盖这些情况。
  • 这解决了 OP。无法考虑数据文件中可能存在的无限数量的错误。
猜你喜欢
  • 2014-07-26
  • 2021-04-25
  • 2017-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多