2016-02-01 3 views
1

Первоначально у меня была программа, которая запрашивала у пользователя имя файла с raw_input, открывала и читала файл и выполняла несколько действий с отпечатками.Почему файл командной строки не получает строки?

Теперь я заинтересован в получении имя файла из аргументов командной строки, как это: C:\Users\MyName\pythonfile.py somenumbers.txt

При попытке выполнить с тем, что вы видите выше ^, файл somenumbers.txt печатается, но никаких дальнейших действий не происходит на нем, начиная с линии: for line in file:.

Я сфокусирован на том, почему я мог выполнять дальнейшие действия до того, как пользователю будет предложено ввести `raw_input '.

Вот код с raw_input, который у меня был до того, где я мог распечатать весь файл (если бы захотел) и выполнить все действия после for line in file:.

import sys 

#Query the user for a file name 
filename = raw_input("Please enter a file name: ") 

integer_list = [] 

#Open and read the file selected by the user 
#Error checking for file 
#try: 
    with open(filename, 'r') as file: 

     #try: 
     for line in file: 
      if line.strip() and not line.startswith("#"): 


       integer_list.append(line) 


       myset = set(line.split()) 
       myset_count = len(myset) 


       integer_list = line.split(' ') 
       result = sum([int(integer_list[i]) != int(integer_list[i+1]) for i in range(len(integer_list)-1)]) + 1 

       mylist = list(line.split()) 
       integer_list = line.split(' ') 
#finally: 
          #file.close() #Close the file 

Теперь, вот код, который получает имя файла из командной строки (с помощью командной строки форматирования вы видите выше):

import sys 
print 'here' 

print 'here1' 
integer_list = [] 
print 'here2' 
print 'here3' 

with open(sys.argv[1], 'r') as file: 
    print(file.read()) 
    for line in file: 
     print 'here4' 
     if line.strip() and not line.startswith("#"):   
      integer_list.append(line) 
      print 'here5' 
      myset = set(line.split()) 
      myset_count = len(myset) 
      print 'here6' 
      integer_list = line.split(' ') 
      result = sum([int(integer_list[i]) != int(integer_list[i+1]) for i in range(len(integer_list)-1)]) + 1 
      mylist = list(line.split()) 
      integer_list = line.split(' ') 

теперь я могу ввести следующее с кодом с участием команды линия agruments:

here 
    here1 
    here2 
    here3 
    This is the file data 
    This is more of the file 

Я озадачен, почему остальная часть кода после for line in file: не будет выполняться в настоящее время.

Любые предложения? Спасибо.

+1

Я не думаю, что вы можете иметь 'try' без' except' или 'finally'. У вас есть два 'try', no 'except' и only 'finally' – wpercy

+0

Также вам не нужно закрывать файл в блоке 'finally', потому что вы используете диспетчер контекстов. – wpercy

ответ

4
print(file.read()) 
for line in file: 
    ... 

С file.read() вы прочитали все: теперь вы в конце файла.

С конца файла больше нет строк для чтения, поэтому for line in file не будет работать, поскольку file исчерпан.

Либо удалите print(file.read()) строку или перемотать файл:

print(file.read()) 
file.seek(0, os.SEEK_SET) 
for line in file: 
    ... 
+0

Спасибо, от начинающего Python! Я ценю вашу подробную помощь и буду помнить об этом в будущем. Потрясающие. –

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