首页 > 解决方案 > 如何为 .csv 文件中找到的每个重复条目创建一个新列表?

问题描述

我希望创建一个名为的新列表airport_data,其中包含基于该机场有多少条目出现在 csv 文件中的信息。

我还没有尝试过任何事情,因为我不是最好的程序员,所以我真的不知道从哪里开始。

import csv

def main():
    airportname = input("What airport are you looking for?").upper()

    f1 = open("airports.csv", "r", encoding="utf8")
    if f1.mode == "r":
        csv_f = csv.reader(f1)
        airport_data = []

        for row in csv_f:
            if airportname in row:
                airport_data.append(row[1])#Airport ICAO Code
                airport_data.append(row[3])#Airport Name
        f1.close()

    f2 = open("runways.csv", "r", encoding="utf8")
    if f2.mode == "r":
        csv_f = csv.reader(f2)

        for row in csv_f:
            if airportname in row:
                airport_data.append(row[3])#Runway Length
                airport_data.append(round(float(row[12])))#Runway Heading
                airport_data.append(row[8])#Runway Name
                airport_data.append(row[14])#Opp Runway Name
                airport_data.append(round(float(row[17])))#Airport Elevation
                print(airport_data)      

    print("You have chosen %s (%s). The Airport Elevation is %sft and Runways %s and %s are available"  % (airport_data[1],airport_data[0],airport_data[6],airport_data[4],airport_data[5]))

main()

What airport are you looking for?KLAX
['KLAX', 'Los Angeles International Airport', '8925', 83, '06L', '24R', 117]
['KLAX', 'Los Angeles International Airport', '8925', 83, '06L', '24R', 117, '10285', 83, '06R', '24L', 111]
['KLAX', 'Los Angeles International Airport', '8925', 83, '06L', '24R', 117, '10285', 83, '06R', '24L', 111, '12091', 83, '07L', '25R', 94]
['KLAX', 'Los Angeles International Airport', '8925', 83, '06L', '24R', 117, '10285', 83, '06R', '24L', 111, '12091', 83, '07L', '25R', 94, '11096', 83, '07R', '25L', 95]
You have chosen Los Angeles International Airport (KLAX). The Airport Elevation is 117ft and Runways 06L and 24R are available.

我希望它是这样的:

['KLAX', 'Los Angeles International Airport', '8925', 83, '06L', '24R', 117]
['KLAX', 'Los Angeles International Airport', '10285', 83, '06R', '24L', 111]
['KLAX', 'Los Angeles International Airport', '12091', 83, '07L', '25R', 94]
['KLAX', 'Los Angeles International Airport', '11096', 83, '07R', '25L', 95]

标签: python

解决方案


airport_data每次通过第二个循环制作一个副本。我已经调用了这个runway_data

此外,一旦找到您正在寻找的机场,您应该跳出第一个循环。

import csv

def main():
    airportname = input("What airport are you looking for?").upper()

    with open("airports.csv", "r", encoding="utf8") as f1:
        csv_f = csv.reader(f1)
        airport_data = []

        for row in csv_f:
            if airportname in row:
                airport_data.append(row[1])#Airport ICAO Code
                airport_data.append(row[3])#Airport Name
                break

    with open("runways.csv", "r", encoding="utf8") as f2:
        csv_f = csv.reader(f2)
        for row in csv_f:
            if airportname in row:
                runway_data = airport_data[:] # Copy airport data to runway
                runway_data.append(row[3])#Runway Length
                runway_data.append(round(float(row[12])))#Runway Heading
                runway_data.append(row[8])#Runway Name
                runway_data.append(row[14])#Opp Runway Name
                runway_data.append(round(float(row[17])))#Airport Elevation
                print(runway_data)      

    print("You have chosen %s (%s). The Airport Elevation is %sft and Runways %s and %s are available"  % (airport_data[1],airport_data[0],runway_data[0][6],runway_data[0][4],runway_data[0][5]))

main()

推荐阅读