Python CSV阅读器无法正确打印行

2024-09-30 03:22:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在读取一个csv文件,在csv文件中取一行并将其放入一个列表中

    with open('DADSA 2019-20 CWK A DATA PETS.csv', 'r') as petData:
  petData = csv.DictReader(petData)
  data = {}
  for row in petData:
    for header, value in row.items():
      try:
        data[header].append(value)
      except KeyError:
        data[header] = [value]
animalType = data['Type']    
breed = data['Breed']    
vacine = data['Vaccinated']    
neuter= data['Neutered']    
admissionReason = data['Reason for admission']            
arrivalDate = data['Date of Arrival']
destination = data ['Destination '],['Sanctuary Identification']
destinationAdd = data ['Destination Address']

当我打印“animalType”时,会出现:

['Cat', 'Cat', 'Dog', 'Parrot', 'Cat', 'Cat', 'Dog', 'Dog', 'Canary', 'Dog', 'Dog', 'Cat', 'Cat', 'Cat', 'Parrot', 'Parrot', 'Dog', 'Cat', 'Cat', 'Cat', 'Dog', 'Dog', 'Dog', 'Canary', 'Cat', 'Dog', 'Dog', 'Cat', 'Cat', 'Cat']

太完美了。然而,当我开始实现一个循环时,它会变得一团糟

if option =="4":
for item in animalType:
    if item == "Dog":
        print(row)

从而产生以下输出:

['P11456', 'Cat', 'Persian', 'Yes', 'Yes', 'D234567', 'Lost', '11/09/2019', '11/10/2019', 'return to owner', '333 New Lane, SE14 6RT'] ['P12467', 'Cat', 'Ancora', 'Yes', '', 'D123456', 'Lost', '14/09/2019', '30/09/2019', 'return to owner', '290 Oak Avenue, BS79 8TR'] ['P31222', 'Dog', 'Alsatian', 'Yes', '', 'D220956', 'Lost', '24/09/2019', '10/10/2019', 'return to owner', '25 Newtown Road, NT56 6YU'] ['P24119', 'Cat', 'Himalayan', 'Yes', '', 'D189875', 'Lost', '26/09/2019', '17/10/2019', 'return to owner', '43 Glynt Lane, CF76 5TR'] ['P25311', 'Dog', 'Dachshund', 'Yes', '', 'D221133', 'Lost', '28/09/2019', '12/10/2019', 'return to owner', '23 Lonely Court, BS1 1TY'] ['P25412', 'Cat', 'Ragdoll', 'Yes', 'Yes', 'D101033', 'Lost', '28/09/2019', '12/10/2019', 'return to owner', '29 Lonely Court, BS1 1TY'] ['P25634', 'Cat', 'Ragdoll', 'Yes', 'Yes', 'D222111', 'Stray', '29/09/2019', '', '', ''] ['P25634', 'Cat', 'Ragdoll', 'Yes', 'Yes', 'D222111', 'Stray', '29/09/2019', '', '', ''] ['P25634', 'Cat', 'Ragdoll', 'Yes', 'Yes', 'D222111', 'Stray', '29/09/2019', '', '', ''] ['P25634', 'Cat', 'Ragdoll', 'Yes', 'Yes', 'D222111', 'Stray', '29/09/2019', '', '', ''] ['P25634', 'Cat', 'Ragdoll', 'Yes', 'Yes', 'D222111', 'Stray', '29/09/2019', '', '', ''] ['P25634', 'Cat', 'Ragdoll', 'Yes', 'Yes', 'D222111', 'Stray', '29/09/2019', '', '', ''] ['P25634', 'Cat', 'Ragdoll', 'Yes', 'Yes', 'D222111', 'Stray', '29/09/2019', '', '', ''] ['P25634', 'Cat', 'Ragdoll', 'Yes', 'Yes', 'D222111', 'Stray', '29/09/2019', '', '', ''] ['P25634', 'Cat', 'Ragdoll', 'Yes', 'Yes', 'D222111', 'Stray', '29/09/2019', '', '', ''] ['P25634', 'Cat', 'Ragdoll', 'Yes', 'Yes', 'D222111', 'Stray', '29/09/2019', '', '', ''] ['P25634', 'Cat', 'Ragdoll', 'Yes', 'Yes', 'D222111', 'Stray', '29/09/2019', '', '', '']

它也在打印一排猫

我希望代码检查CSV文件的第二行(我称之为animalType),如果在该列中他们是“Dog”,我希望它打印该行

是我的方法不对,还是我的想法正确,执行力不好

编辑:

我现在已经改变了代码,我得到了一个不同的问题

if option =="4":
    with open('DADSA 2019-20 CWK A DATA PETS.csv', 'r') as petData:
        petData = csv.DictReader(petData)
        data = {}
        for row in petData:
            if row['Type'] == "Dog" and row['Vaccinated'] == "Yes" and row['Microchip Number'] != 0 and row ['Neutered'] == "Yes":
                Dogs.append(row)
                print(Dogs)

输出如下:

[] ['P11456', 'Cat', 'Persian', 'Yes', 'Yes', 'D234567', 'Lost', '11/09/2019', '11/10/2019', 'return to owner', '333 New Lane, SE14 6RT'] ['P12467', 'Cat', 'Ancora', 'Yes', '', 'D123456', 'Lost', '14/09/2019', '30/09/2019', 'return to owner', '290 Oak Avenue, BS79 8TR'] ['P31222', 'Dog', 'Alsatian', 'Yes', '', 'D220956', 'Lost', '24/09/2019', '10/10/2019', 'return to owner', '25 Newtown Road, NT56 6YU'] ['P24119', 'Cat', 'Himalayan', 'Yes', '', 'D189875', 'Lost', '26/09/2019', '17/10/2019', 'return to owner', '43 Glynt Lane, CF76 5TR'] ['P25311', 'Dog', 'Dachshund', 'Yes', '', 'D221133', 'Lost', '28/09/2019', '12/10/2019', 'return to owner', '23 Lonely Court, BS1 1TY'] ['P25412', 'Cat', 'Ragdoll', 'Yes', 'Yes', 'D101033', 'Lost', '28/09/2019', '12/10/2019', 'return to owner', '29 Lonely Court, BS1 1TY'] [OrderedDict([('Sanctuary Identification', 'P24117'), ('Type', 'Dog'), ('Breed', 'Bulldog'), ('Vaccinated', 'Yes'), ('Neutered', 'Yes'), ('Microchip Number', 'D121323'), ('Reason for admission', 'Abandoned'), ('Date of Arrival', '26/09/2019'), ('Date of Departure', ''), ('Destination ', ''), ('Destination Address', '')])] [OrderedDict([('Sanctuary Identification', 'P24117'), ('Type', 'Dog'), ('Breed', 'Bulldog'), ('Vaccinated', 'Yes'), ('Neutered', 'Yes'), ('Microchip Number', 'D121323'), ('Reason for admission', 'Abandoned'), ('Date of Arrival', '26/09/2019'), ('Date of Departure', ''), ('Destination ', ''), ('Destination Address', '')]), OrderedDict([('Sanctuary Identification', 'P24142'), ('Type', 'Dog'), ('Breed', 'Bulldog'), ('Vaccinated', 'Yes'), ('Neutered', 'Yes'), ('Microchip Number', 'D223311'), ('Reason for admission', 'Abused'), ('Date of Arrival', '28/09/2019'), ('Date of Departure', ''), ('Destination ', ''), ('Destination Address', '')])]

如您所见,输出的开头是错误的,它无缘无故地显示cats。但是,输出的结尾部分显示了3个正确的行


Tags: tofordatareturncatyesrowowner
1条回答
网友
1楼 · 发布于 2024-09-30 03:22:18

你为什么不这样做:

for row in petData:
    if row['Type'] == "Dog":
        print(row)

而不是将每个属性拆分为单独的列表

相关问题 更多 >

    热门问题