2015-06-05 108 views
-3

如果这是可怕的代码,我很抱歉。这是我尝试完全无助的第一件真正的事情。我试图让它读取文件的前4行。请告诉我我的代码有什么问题?

from sys import argv 

script, filename = argv 

print "Is %r the file you wish to open?" % filename 
print "If you do not wish to continue type CTRL-C (^C)." 
print "If you do wish to continue, please hit RETURN." 

raw_input("Are you sure?") 

print "Opening %r please wait... " % filename 
target = open(filename, 'r') 

print "Thank you for you request." 

print "The file contains the lyrics to a certain song, can you guess it?" 
target.read("line 1: ") 
target.read("\n") 
target.read("line 2: ") 
target.read("\n") 
target.read("line 3: ") 
target.read("\n") 
target.read("line 4: ") 
target.read("\n") 

song = raw_input("Go on, take a guess!") 

print "%r? Good Guess!" % song 

print "Goodbye!" 
target.close() 
+0

你为什么认为代码错了?你有错误吗(提供完整的追溯)?意想不到的产出(提供投入,预期和实际产出)? – jonrsharpe

回答

2

更改代码的中间块:

print "Opening %r please wait... " % filename 
print "Thank you for you request." 

print "The file contains the lyrics to a certain song, can you guess it?" 
with open(filename, 'r') as target: 
    for lineNum in range(4): 
     print target.readline() 

如果你打算打印的行之前的行号,你可以不喜欢

with open(filename, 'r') as target: 
    for lineNum in range(1,5): 
     print 'line {}: '.format(lineNum) + target.readline() 
+1

实际上'read'可以用一个整数作为参数来设置要读取的字节数。 – Hexaholic

+0

“不确定你在通过'第4行'时期待什么”。我敢打赌,他预计它会像raw_input一样工作:打印第一个参数,然后从某个输入通道接收数据。 – Kevin

0

使用target.readline() “第1行:”并且是垃圾。新行也被默认读取,您不需要阅读它!

0

该文件说open返回file object。文件对象有一个read方法服用可选size参数读取一定数量的字节:

file.read([size])
阅读从文件(减去如果 读取命中EOF获得size字节之前)最size字节。如果size参数为 为负数或省略,请读取所有数据,直至达到EOF。字节为 作为字符串对象返回。立即遇到EOF为 时返回空字符串。 (对于某些文件,例如ttys,在命中EOF之后,继续读取 是有意义的。)请注意,此方法可能会多次调用基础C函数fread()以尽力 尽可能接近size字节。还要注意,当处于非阻塞模式下时,可以返回比请求数据更少的数据,即使 (如果没有给出size参数)。

您正在通过size="line 1: "

相关问题