过滤 csv 中的行并保存到新的 csv 文件

过滤 csv 中的行并保存到新的 csv 文件

我想逐行过滤csv文件并选择满足if条件的行。

由于csv文件是用逗号分隔的,所以代码应该是这样的:

'BEGIN {FS=','}
{while read line 
if (condition) 
   save selected line to a new csv file
} done < file.csv'

如果满足 if 条件,如何将所选行保存到新的 csv 文件中?谁能提供一些例子吗?

答案1

awk这样使用

awk -F, '(condition) { print >"to_new.csv"}' file.csv

指定分隔字段的-F,分隔符逗号。,如果状况与您的条件匹配,然后它将将该行重定向到名为to_new.csv.

我们用了单“ >”重定向这里。当使用这种类型的重定向时,to_new.csv在第一个输出写入之前被擦除。后续写入相同的to_new.csv不要删除该文件,而是追加到该文件中。 (这与在 shell 脚本中使用重定向的方式不同。)如果to_new.csv不存在,它被创建。

或者简单地写:

awk -F, 'condition' file.csv > to_new.csv

答案2

我会使用 Python 来做这样的事情。这是一个例子:

import csv

#Create a csv file with some data
myData = [["first_name", "second_name", "Grade"],
          ['Alex', 'Brian', 'A'],
          ['Tom', 'Smith', 'B']]

myFile1 = open('file1.csv', 'w')
with myFile1:
    writer = csv.writer(myFile1)
    writer.writerows(myData)

#Create a second csv file
myFile2 = open('file2.csv', 'w')

#Read the first file created with data
with open('file1.csv') as File:
    reader = csv.reader(File)
    for row in reader:
        #Print every row to the console
        print(row)
        if row[0] == "Alex":
           #If the first cell of the row says Alex, say hi and add the row to the second file
           print "Hi Alex"
           with myFile2:
             writer = csv.writer(myFile2)
             writer.writerow(row)

相关内容