我最初有一个程序,提示用户输入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:
之后的其余代码。
有什么建议吗?谢谢。
答案 0 :(得分:4)
w3wp
使用print(file.read())
for line in file:
...
,您已阅读所有内容:您现在位于文件的末尾。
从文件的末尾开始,没有更多的行可供阅读,因此file.read()
无法运行,因为for line in file
已用尽。
删除file
行,或快退文件:
print(file.read())