为什么命令行文件没有获取行?

时间:2016-02-01 19:43:18

标签: python python-2.7 command-line-arguments

我最初有一个程序,提示用户输入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 个答案:

答案 0 :(得分:4)

w3wp

使用print(file.read()) for line in file: ... ,您已阅读所有内容:您现在位于文件的末尾。

从文件的末尾开始,没有更多的行可供阅读,因此file.read()无法运行,因为for line in file已用尽。

删除file行,或快退文件:

print(file.read())