from sys import argv
script,inputfile=argv
def print_all(file):
print(file.read())
def rewind(file):
file.seek(0)
def print_line(line,file):
print(line,file.readline())
currentFile=open(inputfile)
print("Let's print the first line: \n")
print_all(currentFile)
print("Rewind")
rewind(currentFile)
currentLine=1
print_line(currentLine,currentFile)
currentLine+=1
print_line(currentLine,currentFile)
currentLine+=1
print_line(currentLine,currentFile)
我有这段代码,这有用,但我不明白的是当我在打印行函数中重写print语句进行打印时(file.readline(line))我得到了一个意外的输出。我使用的是python 3.6
正确输出
This is line 1
This is line 2
This is line 3
Rewind
This is line 1
This is line 2
This is line 3
输出错误
This is line 1
This is line 2
This is line 3
Rewind
T
hi
s i
为什么会这样?
答案 0 :(得分:1)
这是因为file.readline()
,
readline(...)
readline([size]) -> next line from the file, as a string.
Retain newline. A non-negative size argument limits the maximum
number of bytes to return (an incomplete line may be returned then).
Return an empty string at EOF.
因此,当您将行号作为参数传递时,您将通过actullay告知每个currentLine+=1
递增的字节数。
如果您打算逐行打印内容,可以参考,
def print_file_line_by_line(currentFile):
for line in currentFile:
print line.strip('\n')
或者这也有效
def print_file_line(currentLine, currentFile):
try:
print currentFile.read().split('\n')[currentLine-1]
except IndexError as e:
print str(currentLine)+' is greater than number of lines in file'
print ''+str(e)