2015-04-28 3 views
0

Я пытаюсь создать 5 списков из 1 файла данных, ошибка, которую я продолжаю получать, утверждает, что «авиакомпании не определены», но это первое, что я определяю в функции, как это возможно? Что делать, чтобы правильно создать список авиакомпаний, время прибытия, время отправления, цены и номер рейса?Почему моя функция не создает списки?

USAir,1269,6:15,10:57,210 
Delta,5138,16:20,22:10,212 
UNITED,6001,14:12,20:50,217 
Delta,5054,12:30,20:22,227 
UNITED,5949,9:30,14:43,264 
JetBlue,1075,17:00,20:06,280 
Delta,1263,6:00,11:30,282 
Delta,3824,9:00,14:45,282 
USAir,1865,16:55,21:33,300 
USAir,3289,18:55,23:41,300 
USAir,1053,8:00,13:02,300 
USAir,2689,12:55,18:09,300 
USAir,3973,9:25,14:00,302 
USAir,3267,11:30,16:13,302 
USAir,3609,13:25,18:28,302 
USAir,3863,15:35,20:54,302 
USAir,3826,17:45,23:19,302 
USAir,1927,7:00,12:53,302 
Delta,3601,12:00,17:29,307 
Delta,4268,7:15,12:46,307 
UNITED,4676,6:00,10:45,321 
UNITED,4103,11:00,16:16,321 
USAir,3139,11:51,16:29,332 
JetBlue,475,7:30,10:42,340 
USAir,3267,11:30,18:15,367 
UNITED,2869,16:55,21:33,406 
UNITED,2865,6:15,10:57,406 
UNITED,2729,8:00,13:02,406 
UNITED,2645,7:00,12:53,445 

и код я использую

def getFlights(): 

    airlines = [] 
    flightNums = [] 
    depTimes = [] 
    arriveTimes = [] 
    prices = [] 

    fname = input("Enter name of data file: ") 
    infile = open(fname, 'r') 

    line = infile.readline() 
    line = line.strip() 


    while line != "": 
     line = line.strip() 
     airline, flightNum, depTime, arriveTime, price = line.split(',') 
     airlines.append(airline) 
     flightNums.append(flightNum) 
     depTimes.append(depTime) 
     arriveTimes.append(arriveTime) 
     prices.append(price) 
     line = infile.readline() 
     line = line.strip() 

    infile.close() 
    return airlines, flightNums, depTimes, arriveTimes, prices 

getFlights() 
print(airlines, flightNums, depTimes, arriveTimes, prices) 
+0

Какая линия это у вас есть ошибка на? Python должен включать строку, в которой ошибка содержится в сообщении об ошибке. – ASCIIThenANSI

+0

Вы никогда не помещаете возвращаемые значения из 'getFlights()' в переменные. – Phylogenesis

+0

Вы не должны использовать 'readline' напрямую. Вместо этого просто используйте встроенный итератор для файлов: 'for line in infile:' – b4hand

ответ

1

Локальные переменные внутри функции не доступны за пределами вызова функции. Если вы хотите использовать возвращаемые значения getFlights, вы должны назначить их переменным в вызывающем контексте.

(airlines, flightNums, depTimes, arriveTimes, prices) = getFlights() 
print(airlines, flightNums, depTimes, arriveTimes, prices) 
+0

Или даже 'print (* getFlights()) может быть все, что требуется –

+0

Очень верно. Я предполагал, что OP хотел сделать больше, чем просто «распечатать» переменные после разбора файла. – b4hand

0

Что b4hand сказал правильно, однако, Pythonic способ сделать это с помощью csv.reader и with заявление, например:

import csv 

filename = input('Enter filename: ') 
with open(filename, 'rb') as fin: 
    csvin = csv.reader(fin) 
    airlines, flightNums, depTimes, arriveTimes, prices = zip(*csvin) 
Смежные вопросы