【问题标题】:How to split a line on comma, ignoring commas within quotes? [duplicate]如何在逗号上分割一行,忽略引号内的逗号? [复制]
【发布时间】:2016-03-25 18:39:58
【问题描述】:

我有一个包含很多行的文件,如下所示:

1,50,"asasd",25
2,51,"apa,asdfi",26
.....
.....

如何通过逗号跳过双引号内字符串内的逗号来拆分第二行?

我需要第二行的结果为:

[2,51,"apa,asdfi",26]

目前我正在尝试:

x = line.split(',')

结果是这样的:

['2','51','"apa','asdfi"','26']

【问题讨论】:

    标签: python string split


    【解决方案1】:

    正如评论中所说,尝试将您的文件读取为 .csv,它会很好地处理字符串中的逗号。 如果您在使用时遇到问题,可以阅读文档https://docs.python.org/2/library/csv.html 或查看其中的一些示例https://dzone.com/articles/python-101-reading-and-writing

    import csv
    
    with open(file.csv,'r') as f:
        spamreader = csv.reader(f,delimiter=",")
        for row in spamreader:
            # a row is a list containing all elements in a line
            print row
    

    结果:

    ['1','50','"asasd"','25']  
    ['2','51','"apa,asdfi"','26']
    

    【讨论】:

      【解决方案2】:

      你也可以用re.findall提取它们:

      >>> s = '2,51,"apa,asdfi",26'
      >>> 
      >>> re.findall(r'(\d+|".*")', s)
      ['2', '51', '"apa,asdfi"', '26']
      

      虽然我确实推荐dup中提到的方法

      【讨论】:

        【解决方案3】:

        你可以试试下面的代码:

        line = '2,51,"apa,asdfi",26'
        result = line.split(",")
        
        length = len(result)
        for i in range(length):
            if '"' in result[i]:
                result[i] += "," + result[i+1]
                result.remove(result[i+1])
                break
        
        length = len(result)
        for i in range(length):
            if result[i].isdigit():
                result[i] = int(result[i])
        
        print(result)
        

        输出:

        [2, 51, '"apa,asdfi"', 26]
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-04-05
          • 1970-01-01
          • 2012-10-30
          • 2013-04-02
          • 2012-10-31
          • 2012-05-23
          • 2012-07-12
          相关资源
          最近更新 更多