我是一个努力学习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
感谢所有
答案 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