2014-09-16 2 views
-1
def is_number(file): 
    cList = file.read() 
    chars=len(cList) 
    t = 0 
    retlist=[] 

    while t<chars: 
     try: 
      int(cList[t]) 
      int(cList[t + 1]) 
      x = (cList[t] + cList[t + 1]) 
      retlist.append(int(x)) 
      t+=1 
     except ValueError: 
      try: 
       x = int(cList[t]) 
       retlist.append(x) 
      except ValueError: 
       pass 

     t+=1 


    retlist.sort() 
    return retlist 

Хорошо, так это мой код, который читает файл и переводит все числа до 99 и добавляет их в список. Но когда я возвращаю его список, он вдруг пуст по какой-то причине, не может понять, почему, пожалуйста, помогите!Моя программа опустошает мой список, и я не понимаю, почему

def main(): 

    while True: 

     try: 
      f = input("Enter the name of the file: ") 
      file = open(f + ".txt", "r") 
      is_number(file) 
      break 

     except IOError: 
      pass 

     print("The file %s could not be found, try again!" % (f)) 


    numList = is_number(file) 
    print(numList) 

основной()

код, который вызывает функцию.

+0

Пожалуйста, добавьте ввод и то, что вы ожидаете от этой функции – chachan

+4

Вы возвращаете 'realist' не' retlist'. Это опечатка, или у вас на самом деле есть «реалист» где-то еще в вашем коде? – BartoszKP

+0

Чтобы быть уверенным, вы точно скопировали код? Потому что вы возвращаете '' реалист'', которого не существует. – magnetometer

ответ

3

Python (и большинство других языков) имеют понятие «указатель файла» - это ссылка на какое-либо место в файле. Все чтение и запись начинаются с указателя файла. Например, если указатель файла находится в начале файла, вызов read() будет читать весь файл. Если указатель файла был перемещен, скажем, 100 символов вперед, вызов read() пропустит эти первые 100 символов.

Чтение всегда будет указывать указатель файла сразу после того, как точка перестанет считаться. Так, например, если вы попросите его прочитать только 100 байт, указатель файла будет продвигать 100 байт, и следующее чтение будет читать оттуда.

В вашем коде is_number принимает дескриптор файла и сразу же считывает все содержимое файла. Когда это делается, указатель файла перемещается в конец файла. После выхода вашего цикла вы снова вызываете is_number в последний файл, который был открыт. Поскольку указатель файла находится в конце файла и не был перемещен, читать нечего, поэтому numList устанавливается в пустую строку.

+0

Спасибо за ваш ответ! Дал мне еще больше понимания во всем этом! Как вы можете сказать, я все еще новичок. – Philip

0

Чтобы добавить к ответу Брайана, вы можете использовать метод файлов seek() для перезапуска чтения с самого начала. Например, если f - это имя вашего дескриптора файла, то f.seek(0) укажет на начало файла.

+0

Это лучше оставить как комментарий к ответу Брайана, так как это не полный ответ. –

+0

Мне было интересно об этом, спасибо! – Philip

+0

@StevenRumbalski К сожалению, еще нет достаточного количества баллов для комментариев :-( – Eliezer

Смежные вопросы