数不行中的分隔符,同时忽略作为数据值一部分的分隔符

问题描述

我正在逐行读取一个大的 csv 文件,我想计算编号。每行中的分隔符。

但如果分隔符是数据值的一部分,则不应计算在内。

数据集的几条记录:

com.abc.xyz,ple Sara,"DIT,Government of Maharashtra,India"
com.mtt.rder,News Maharashtra,Time Internet Limited"
com.grner.mahya,Mh Swth,"Public Health Department,Maharashtra"

在所有 3 行中,实际逗号(将数据分成多列)的数量只有 2 个

但在代码片段输出下方

  • 第 1 行 4 个逗号
  • 2 表示第 2 行
  • 3 表示第 3 行

代码片段:

file1 = open('file_name.csv','r') 

while True: 

    line = file1.readline() 
  
    if not line: 
        break
    
    print(line.count(','))

解决方法

一种简单的方法是使用正则表达式并删除两个 " 之间的所有内容,以便不计算其中的逗号。

import re
file1 = open('input.csv','r') 

while True: 
    line = file1.readline()   
    if not line: 
        break
    line = re.sub('".*?"','',line)
    print(line.count(','))

输出:

2
2
2
,

您可以使用 python 中的 csv 包来计算列数:

import csv

with open('file_name.csv','rt') as f:
    csv_reader = csv.reader(f,skipinitialspace=True)
    for line in csv_reader:
        print(len(line))