2016-02-01 49 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's,没有'except's,只有一个'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初学者!我感谢您的详细帮助,并将在未来牢记这一点。真棒。 –

相关问题