Python将一些行打印到新fi

2024-04-19 05:32:47 发布

您现在位置:Python中文网/ 问答频道 /正文

新手问题。。 我有一个巨大的(2米+行)3列csv文件

Name : Metric 1 : Metric 2 
BOB :  1000 : 0
SUE :  1200 : 4
SAM : 1250 : 4

我怎样才能输出一个新文件,它只包含度量2不为零的整行,并且仍然保持标题?你知道吗

谢谢你的帮助


Tags: 文件csvname标题度量sammetricbob
3条回答

你所要做的就是:

  1. 打开csv文件并读取行
  2. 扫描行,看看哪一行有你想要的属性
  3. 在新的csv文件中输出这些行。你知道吗

下面是一个简单的例子:

inp = open('input.csv', 'r')
out = open('output.csv', 'w')
lines = inp.readlines()
inp.close()

out.write(lines[0])
for i, line in enumerate(lines):
    if i > 0:
        cells = line.split(',')
        if int(cells[2]):
            out.write(line)

out.close()    

上面的代码将生成所需的输出,如下所示:

INPUT.CSV:             ->  OUTPUT.CSV:

Name,Metric 1,Metric 2     Name,Metric 1,Metric 2
BOB :  1000 : 0        ->  SUE,1200,4
SUE,1200,4             ->  SAM,1250,4
SAM,1250,4

您可以使用csv模块。你知道吗

C:\Users\kvivek\Desktop>type test.csv
Name , Metric 1 , Metric 2
BOB ,  1000 , 0
SUE ,  1200 , 4
SAM , 1250 , 4
C:\Users\kvivek\Desktop>python
>>> import csv
>>> reader = csv.reader(open(r'C:\Users\kvivek\Desktop\test.csv'))
>>> for row in reader:
...   if '0' not in row[2] :
...      print row
...
['Name ', ' Metric 1 ', ' Metric 2 ']
['SUE ', '  1200 ', ' 4']
['SAM ', ' 1250 ', ' 4']
>>>

Python的csv模块有一个DictReader对象,可以很好地解决这个问题。我会动态地读写它们,因为在内存中保存大型数据集可能会在以后出现问题。你知道吗

您可以检查所需列中的值是否为0。如果没有,写下这行。你知道吗

import csv

with open('mycsvinput.csv', 'r') as file_input, open('mycsvoutput.csv', 'w') as file_output:
    csv_reader = csv.DictReader(file_input)
    csv_writer = csv.DictWriter(file_output, fieldnames=csv_reader.fieldnames)

    csv_writer.writeheader()

    for line in csv_reader:
        if line['Metric 2'].strip() != '0':
            csv_writer.writerow(line)

编辑:如果csv中的行在每个值上都有空格填充,则在检查0之前可能需要将其去掉

相关问题 更多 >