【问题标题】:Python csv.reader to separate items by comma but ignore those within pairs of double-quotesPython csv.reader 用逗号分隔项目,但忽略双引号内的项目
【发布时间】:2016-03-27 23:14:43
【问题描述】:

我正在尝试使用 csv.reader 从字符串创建项目列表,但我遇到了麻烦。例如,我有以下字符串:

bibinfo = "wooldridge1999asymptotic, author = \"Wooldridge, Jeffrey M.\", title = \"Asymptotic Properties of Weighted M-Estimators for Variable Probability Samples\", journal = \"Econometrica\", volume = \"\", year = 1999"

然后我运行以下代码:

import csv
from io import StringIO
bibitems = [bibitem for bibitem in csv.reader(StringIO(bibinfo), skipinitialspace = True)][0]

但是,我没有得到一个列表,其中一对双引号中的逗号不被视为分隔符,而是得到以下(不需要的)结果:

['wooldridge1999asymptotic', 'author = "Wooldridge', 'Jeffrey M."', 'title = "Asymptotic Properties of Weighted M-Estimators for Variable Probability Samples"', 'journal = "Econometrica"', 'volume = ""', 'year = 1999']

换句话说,它在不应该将某些项目(例如作者的姓氏与名字)分开时。我按照其他 link 中的提示进行操作,但似乎我也缺少其他内容。

【问题讨论】:

    标签: csv python-3.4


    【解决方案1】:

    如果" 位于项目的开头,则可以:

    "author = Wooldridge, Jeffrey M."
    

    修改后的文字:

    >>> s = """wooldridge1999asymptotic, "author = Wooldridge, Jeffrey M.", title = "Asymptotic Properties of Weighted M-Estimators for Variable Probability Samples", journal = "Econometrica", volume = "", year = 1999"""
    >>> list(csv.reader(s.splitlines(), skipinitialspace=True))
    [['wooldridge1999asymptotic',
      'author = Wooldridge, Jeffrey M.',
      'title = "Asymptotic Properties of Weighted M-Estimators for Variable Probability Samples"',
      'journal = "Econometrica"',
      'volume = ""',
      'year = 1999']]
    

    【讨论】:

    • 嗨,迈克。谢谢回复。问题是引号应该保留在作者姓名周围。 (这是一个 BibTeX 数据。我从网站中的正则表达式获得它,该网站将引用转换为 BibTeX。)所以我需要一个解决方案来处理数据。还是谢谢。
    猜你喜欢
    • 1970-01-01
    • 2020-04-05
    • 1970-01-01
    • 2020-08-03
    • 2011-12-25
    • 2021-08-24
    相关资源
    最近更新 更多