Не глядя слишком внимательно на ваш код, я чувствую, что вы делаете его более сложным, чем нужно - при этом, я не знаю, как выглядит ваш 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
Где первая строка определяет имена полей столбцов, а вторая строка может быть пустой. В соответствии с вашими критериями фильтрации, только вторая и третья записи (Tom
и Joe
) могут пройти через фильтр, правильно?
Я предлагаю что-то вроде этого:
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.DictReader
с. Он обрабатывает пустые строки и потенциальные имена полей автоматически. Однако вместо печати отфильтрованных строк вы должны записать их в файл.
Не видя выдержки из вашего фактического файла CSV, трудно помочь больше.