Python readline没有给出预期的输出

时间:2017-04-16 11:12:23

标签: python python-3.x

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

为什么会这样?

1 个答案:

答案 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)