【问题标题】:delete rows in csv based on specific column value python根据特定列值python删除csv中的行
【发布时间】:2018-05-31 11:13:52
【问题描述】:

我有一个大型 csv,其中包含以下标题列 idtypestatelocationnumber of students

以及以下值:

124, preschool, Pennsylvania, Pittsburgh, 1242
421, secondary school, Ohio, Cleveland, 1244
213, primary school, California, Los Angeles, 3213
155, secondary school, Pennsylvania, Pittsburgh, 2141
etc...

文件未排序,我想要一个新的 csv 文件,其中包含学生人数超过 2000 人的所有学校。

我找到的答案是关于有序的 csv 文件,或者在特定行数之后拆分它们。

【问题讨论】:

  • 您是要使用标准库,还是要向 3rd 方pandas 开放?
  • 你试过什么没用? (提示:根据条件过滤可迭代对象非常简单)。

标签: python csv


【解决方案1】:

这是使用csv 模块的解决方案:

import csv

with open('fin.csv', 'r') as fin, open('fout.csv', 'w', newline='') as fout:

    # define reader and writer objects
    reader = csv.reader(fin, skipinitialspace=True)
    writer = csv.writer(fout, delimiter=',')

    # write headers
    writer.writerow(next(reader))

    # iterate and write rows based on condition
    for i in reader:
        if int(i[-1]) > 2000:
            writer.writerow(i)

结果:

id,type,state,location,number of students
213,primary school,California,Los Angeles,3213
155,secondary school,Pennsylvania,Pittsburgh,2141

【讨论】:

    【解决方案2】:

    如果您只想读取文件并避免任何其他处理,您可以使用正则表达式 - (假设这是最后一列,并且值是正整数) -

    import re
    f1 = open('Test1.txt','wb')
    with open("Test.txt") as f:
        for line in f:
            match = re.search(r'[2-9][0-9]{3,}$', line)
            if (match):
                f1.write(line)
    
    f1.close()
    

    如果你在 bash 上做同样的事情会快得多 -

    while read line; do
      K='[2-9][0-9]{3,}$'
      if [[ $line =~ $K ]] ; then echo $line; fi
    done <Test.txt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-24
      • 1970-01-01
      • 1970-01-01
      • 2021-02-27
      • 2022-11-17
      • 2021-12-26
      • 2022-01-23
      相关资源
      最近更新 更多