在csv中搜索值并多次返回该行

时间:2017-02-18 09:38:46

标签: python excel csv

我是一个努力学习python的菜鸟,

我正在尝试为包含30,000行数据的CSV文件编写脚本。

我想在每一行中查看一列中的数字,并在每次找到该数字时返回该行。

我已经搜索并尝试了许多不同的建议,他们似乎没有做我需要的任何人都可以帮助我,如果我没有意义请告诉我。

这是我目前所拥有的,它只返回标题:

    import csv

with open("test.csv", "r") as input, open ("result.txt","w") as result:
          testfilereader = csv.DictReader(input) 
          Age = 23
          fieldnames = testfilereader.fieldnames
          testfilewriter = csv.DictWriter(result, fieldnames, delimiter=',',)
          testfilewriter.writeheader()      
          for row in testfilereader:
                 for field in row:
                        if field == Age:
                             testfilewriter(row)


input.close

感谢所有

4 个答案:

答案 0 :(得分:2)

您可以按如下方式使用Pandas

csv文件:

Id,Name,Age
1,John,30
2,Alex,20
3,Albert,30
4,Richard,30
5,Mariah,30

<强>蟒:

import pandas as pd

df = pd.read_csv("ex.csv", sep = ",")
print df[df["Age"] == 30] 

   Id     Name  Age
0   1     John   30
2   3   Albert   30
3   4  Richard   30
4   5   Mariah   30

答案 1 :(得分:0)

您可以使用pandas模块来处理表格数据。

首先:将您的csv读入所谓的DataFrame:

import pandas as pd
df = pd.read_csv("test.csv")

现在,您可以通过逻辑索引过滤所需的行:

result = df[df['Age']==23]

要将结果返回到磁盘,只需使用to_csv方法:

result.to_csv('result.csv')

答案 2 :(得分:0)

由于您使用了DictFileReader,因此您将获得一个字典列表。 所以你应该使用dictionary['field']在你想要的字段中搜索年龄。 像这样:

with open("test.csv", "r") as input, open ("result.txt","w") as result:
     testfilereader = csv.DictReader(input) 
     Age = 23
     fieldnames = testfilereader.fieldnames()
     testfilewriter = csv.DictWriter(result, fieldnames, delimiter=',',)
     testfilewriter.writeheader()      
     for row in testfilereader:
         if row['Age'] == Age:
            testfilewriter.writerow(row)

当然,如果字段名称是其他名称,则需要将row['Age']更改为row['Somethingelse']

如果你只是想要迭代这些值,你应该使用testfilereader.values(),但是在第一时间将数据映射到字典是毫无意义的。

您也不应该尝试关闭那里的输入。它将在离开with open...块时关闭。

答案 3 :(得分:0)

大家好,感谢你们所有的帖子,我的电脑和安装熊猫都遇到了麻烦,所以我不得不尝试另一种方式,这对我有用。

import csv
import sys


number = '5' 

csv_file = csv.reader(open('Alerts.csv', "rb"), delimiter=",")
filename  = open("Result.txt",'w')
sys.stdout =filename

#loop through csv list
for row in csv_file:
    if number == row[0]:
       print row