繁体   English   中英

Python CSV 文件:打印与列表相比缺失的元素。 打印整列

[英]Python CSV file: print missing elements compared to list. Prints entire column

我正在尝试使用预定义列表检查 CSV 文件的列标题。 如果缺少一个,我想打印该元素。 到目前为止,我有这个“

#import modules
import csv
from csv import reader

#set CSV file name
file_name = 'check.csv'


#declaring the error count variable starting at 0.
errors = 0


check = ['CLIENT', 'DATE_FROM', 'DATE_TO', 'NATION', 'PERSNUMBER', 'NAME_TEXT']


#open the CSV file
with open(file_name) as csvfile:
    reader = csv.reader(csvfile, delimiter = ';')

    limit = 0
    for header in reader:
        if limit == 1:
            break
        else:
            if header not in check:
                print("Unrecognised column", header)
                errors += 1
            else:
                pass
        limit += 1

print('Header validation finished.')
if errors == 0:
    print('No missing or odd headers')
else:
    print(errors, 'errors encountered.' )

output 是这样的:

Unrecognised column ['CLIENT', 'DATE_FROM', 'PERSNUMBER', 'DATE_TO', 'NATION', 'NAME_TEXT', 'SLT_SYSID']

CSV 文件包含所有这些列,但“SLT_SYSID”是“额外的”。不过,它会打印整行,而不仅仅是缺失值。

每当我运行这样的测试脚本时:

item = ['Cheese','Cake',0,1,2,3,4,5,6,7,8,9]
z = [0, 'Cheese']

for element in item:
    if element not in z:
        print(element)

Output:

Cake
1
2
3
4
5
6
7
8
9

它工作正常。 我认为它必须与阅读 CSV 文件有关?

欢迎任何提示或建议。

干杯!

您可以在此处使用集合。 您可以check集合而不是列表,然后只读取文件的第一行并将其转换为集合以方便比较,例如:

import csv

file_name = 'check.csv'
check = {'CLIENT', 'DATE_FROM', 'DATE_TO', 'NATION', 'PERSNUMBER', 'NAME_TEXT'}

with open(file_name) as fin:
    csvin = csv.reader(fin, delimiter=';')
    header = set(next(csvin, set()))

然后,您可以检查您所期望的是否存在:

if check == header:
    print('ok!')

否则,您可以将您所期望的与您所拥有的之间的差异以及它的倒数打印出来,例如:

else:
    missing = check - header
    extra = header - check
    print('missing ({}):'.format(len(missing)), missing)
    print('extra ({}):'.format(len(extra)), extra)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM