Python:file.readline在行末添加空格

3 投票
3 回答
7108 浏览
提问于 2025-04-17 17:07

我在用Python读取一个用空格填充的文本文件。这个文本文件的验证要求是,每一行的长度必须是特定的,包括那些空格。

我用下面的代码时,Python读取的每一行却多了一个空格。例如,我希望fileX中的所有行都有143个字符,但Python却把它读成了144个字符,因此就说这个文件不合法。如果我用VB.NET做同样的事情,就能得到正确的143个字符。

为什么Python的readline函数会多出一个字符呢?(我用的是Python 3.2)

import io
myfile = open("file_path", "r")
while True:
    line = myfile.readline()
    if not line:
            break
    print(len(line))  #This prints 144 characters

VB.NET能正确返回143个字符的长度。

Using objStreamReader As StreamReader = New StreamReader(myFilePath)
    While objStreamReader.EndOfStream = False
            line = objStreamReader.ReadLine
            len(line)   'This returns the correct length of 143.

使用line.strip并不是一个好办法,因为这样可能会删掉一些有用的空格。记住,这个文件是填充到一个最大长度的。

3 个回答

0

使用列表推导式,你可以像下面这样做:

def readfile():
    with open(filename, 'r') as fh:
        lines = [line.rstrip('\n') for line in fh.readlines()]
        for line in lines:
            print (line)
0

第144个字符是一个换行符。

with open("file_path") as file:
    for line in file:
        line = line.rstrip("\n") # strip newline
        print(len(line)) # should print 143 
7

objStreamReader.ReadLine 这个方法会把行末的换行符去掉,而Python的 file.readline 方法则会保留这个换行符。

如果你的文件是以文本模式打开的(除非你特别指定了其他方式,一般都是这样),那么行末的换行符要么是没有(只有最后一行),要么就是一个 \n。所以你可以放心地用 rstrip('\n') 来去掉它。

撰写回答