我正在创建一个 Python 代码来过滤掉 CSV 中的值,但我想保留的值正在被删除。我错过了什么?



我一直在与我的一位顾问合作,创建一个python代码,该代码将:1.从csv中移除前2行,2.删除"输出"列中包含"误差幅度"值的行,以及3.删除"16岁及以上工人"列中没有值的行。

CSV的格式有四列,顺序如下:居住、工作场所、输出、16岁及以上的工人。

我们已经成功地完成了上述所有目标,但是,代码删除了Workers 16及以上列中不包含值的行,以及超过3个字符的任何值。任何大于或等于1000的值都会被过滤掉,我看不出代码中会发生什么。有什么帮助或建议吗?

谢谢!

import csv
with open('wyoming.csv','r') as csv_file:
Oneline = csv_file.readline()
Oneline = csv_file.readline()
with open('Nicole_out4.csv', 'w', newline='') as csv_out:
mywriter = csv.writer(csv_out, quoting=csv.QUOTE_ALL)
Oneline = csv_file.readline()
Title_line = Oneline.split(',')
Title_line[-1] = Title_line[-1][0:-1]
print(Title_line)
mywriter.writerow(Title_line)
for Oneline in csv_file:
testline = Oneline.split('"')
test1 = len(testline)
if test1 < 2:
break
for ea in testline:
if len(ea) < 2:
testline.remove(ea)
elif (ea[0]==','):
newea = ea[1:].split(',')
testline.remove(ea)
for eas in newea:
testline.append(eas)
if (testline[2] == 'Margin of Error') or (len(testline[3]) < 2):
break
else:
testline[-1] = testline[-1][0:-1]
mywriter.writerow(testline)
csv_out.close()
csv_file.close()

在不仔细查看代码的情况下,我觉得你让它变得比需要的更复杂了——也就是说,我真的不知道你的CSV文件到底是什么样子。

我想它可能看起来像这样(data.csv(:

Residence,Workplace,Output,Workers 16 and Older
Bob'sHome,Bob'sWork,abc,
Tom'sHome,Tom'sWork,xyz,100
Joe'sHome,Joe'sWork,foo,1000
Tim'sHome,Tim'sWork,Margin of Error,10

其中第一行定义列字段名称,第二行可能为空。根据您的筛选条件,只有第二个和第三个条目(TomJoe(才能通过筛选,对吗?

我建议这样做:

def main():
from csv import DictReader
with open("data.csv", "r") as file:
reader = DictReader(file)
for line in reader:
if line["Output"] == "Margin of Error" or not line["Workers 16 and Older"]:
continue
print(line)
return 0

if __name__ == "__main__":
import sys
sys.exit(main())

输出:

{'Residence': "Tom'sHome", 'Workplace': "Tom'sWork", 'Output': 'xyz', 'Workers 16 and Older': '100'}
{'Residence': "Joe'sHome", 'Workplace': "Joe'sWork", 'Output': 'foo', 'Workers 16 and Older': '1000'}
>>> 

我有点惊讶你没有充分利用csv模块。与其将其用于CSV文件的读取和写入,不如仅将其用于写入部分。我喜欢使用csv.DictReaders。它自动处理空行和潜在的字段名。但是,您可以将过滤后的行写入文件,而不是打印这些行。

如果没有看到实际CSV文件的摘录,很难提供更多帮助。

相关内容

最新更新