簡體   English   中英

readlines沒有在python中讀取文件的最后一行

[英]readlines not reading the last line of the file in python

我有一個代碼,我正在使用readlines函數從文件中讀取所有行,我正在進一步解析列表中的每一行。 但是當我打印列表時,我看到循環忽略了文件中的最后一行。 當我在文件中插入一個空行時,將讀取所有內容。 你能不能告訴我它為什么這樣做

def readFile1(file1):
    f = file1.readlines()
    cList1 = []
    for line in f:
        if re.findall('\n',line):
            v = re.sub('\n','',line)
        cList1.append(v)

    print cList1

這是打印除文件最后一行之外的所有內容。

如果最后一行沒有以換行符結尾,則代碼不會將其添加到cList1 相反,它會添加倒數第二行的第二個副本(仍然存儲在v )。

編寫該循環的更簡潔方法是:

cList1 = []
for line in f:
    cList1.append(line.rstrip('\n'))

或者,確實:

cList1 = [line.rstrip('\n') for line in f]

事實上,我會完全避免readlines()調用:

def readFile1(file1):
    cList1 = [line.rstrip('\n') for line in file1]
    print cList1

如果您只想將文件中的所有行都放到列表中,那么就會容易(在我看來更清晰)。

def readFile1(file1):
    cList1 = file1.read().splitlines()
    print cList1

在這種情況下,我認為不需要使用發電機。 另外,我對它進行了基准測試(在Windows上),@ aix給出的生成器形式在某些情況下稍慢。

>>> import timeit
>>> import os
>>>
>>> # Setup
>>> open('testfile', 'w').write('This Is A Test' * 500)
>>>
>>> # Time generator form (ten thousand times)
>>> timeit.timeit("lst = [line.rstrip('\\n') for line in open('testfile')]", 
...     number=10000)
2.656837282256163
>>>
>>> # Time splitlines() form (ten thousand times)
>>> timeit.timeit("lst = open('testfile').read().splitlines()", number=10000)
1.3464799954204238
>>>
>>> # Cleanup
>>> os.remove('testfile')

您的最后一行沒有\\ n字符,因為您之后沒有新行。

print f實際打印所有行。 這是你代碼中的一個錯誤。 您將倒數第二行追加兩次,因為最后一行不包含\\n 你錯過了一個else塊,當它不包含\\n時分配v

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM