python如何讀取檔案中的某幾行

2021-10-17 18:49:01 字數 2896 閱讀 6636

python讀取檔案的指定行,可以使用以下的方法

1、os.mknod(「test.txt」) #建立空檔案

2、fp = open(「test.txt」,w) #直接開啟乙個檔案,如果檔案不存在則建立檔案

3、open 模式

處理檔案時,乙個常見的需求就是讀取檔案的指定行內容,那麼該如何實現的?

with

open

('a.log'

,'r'

)as fp:

lines = fp.readlines(

) last_line = lines[-1

]

即使不考慮異常處理的問題,這個**也不完美,因為如果檔案很大,lines = fp.readlines()會造成很大的時間和空間開銷。

解決的思路是用將檔案指標定位到檔案尾,然後從檔案尾試探出一行的長度,從而讀取最後一行。**如下:

def

__get_last_line

(self, filename)

:"""

get last line of a file

:param filename: file name

:return: last line or none for empty file

"""try:

filesize = os.path.getsize(filename)

if filesize ==0:

return

none

else

:with

open

(filename,

'rb'

)as fp:

# to use seek from end, must use mode 'rb'

offset =-8

# initialize offset

while

-offset < filesize:

# offset cannot exceed file size

fp.seek(offset,2)

#read#offset chars from eof(represent by number'2')

lines = fp.readlines(

)# read from fp to eof

iflen

(lines)

>=2:

# if contains at least 2 lines

return lines[-1

]# then last line is totally included

else

: offset *=

2# enlarge offset

fp.seek(0)

lines = fp.readlines(

)return lines[-1

]except filenotfounderror:

print

(filename +

' not found!'

)return

none

其中有幾個注意點:

fp.seek(offset[, where])中where=0,1,2分別表示從檔案頭,當前指標位置,檔案尾偏移,預設值為0,但是如果要指定where=2,檔案開啟的方式必須是二進位制開啟,即使用』rb』模式,

設定偏移量時注意不要超過檔案總的位元組數,否則會報oserror,

注意邊界條件的處理,比如檔案只有一行的情況。

fp.read([size]) #size為讀取的長度,以byte為單位

fp.readline([size]) #讀一行,如果定義了size,有可能返回的只是一行的一部分

fp.readlines([size])

#把檔案每一行作為乙個list的乙個成員,並返回這個list。其實它的內部是通過迴圈呼叫readline()來實現的。如果提供size引數,size是表示讀取內容的總長,也就是說可能唯讀到檔案的一部分。

fp.write(str) #把str寫到檔案中,write()並不會在str後加上乙個換行符

fp.writelines(seq)

#把seq的內容全部寫到檔案中(多行一次性寫入)。這個函式也只是忠實地寫入,不會在每行後面加上任何東西。

fp.close() #關閉檔案。python會在乙個檔案不用後自動關閉檔案,不過這一功能沒***,最好還是養成自己關閉的習慣。

如果乙個檔案在關閉後還對其進行操作會產生valueerror

fp.flush() #把緩衝區的內容寫入硬碟

fp.fileno() #返回乙個長整型的」檔案標籤「

fp.isatty() #檔案是否是乙個終端裝置檔案(unix系統中的)

fp.tell() #返回檔案操作標記的當前位置,以檔案的開頭為原點

fp.next() #返回下一行,並將檔案操作標記位移到下一行。把乙個file用於for … in

file這樣的語句時,就是呼叫next()函式來實現遍歷的。

fp.seek(offset[,whence])

#將檔案打操作標記移到offset的位置。這個offset一般是相對於檔案的開頭來計算的,一般為正數。但如果提供了whence引數就不一定了,whence可以為0表示從頭開始計算,1表示以當前位置為原點計算。2表示以檔案末尾為原點進行計算。需要注意,如果檔案以a或a+的模式開啟,每次進行寫操作時,檔案操作標記會自動返回到檔案末尾。

fp.truncate([size])

#把檔案裁成規定的大小,預設的是裁到當前檔案操作標記的位置。如果size比檔案的大小還要大,依據系統的不同可能是不改變檔案,也可能是用0把檔案補到相應的大小,也可能是以一些隨機的內容加上去。

原文:

python 讀取 csv檔案某列遇到的問題

1.gbk codec can t decode byte 0xbd in position 3182 illegal multibyte sequence 換用 utf 8 編碼 2.utf 8 codec can t decode byte 0xae in position 3180 inval...

python如何讀取 python 中讀取yaml

yaml 是專門用來寫配置檔案的語言,非常簡潔和強大,遠比 json 格式方便。yaml在python語言中有pyyaml安裝包。yaml 語言 發音 j m l 的設計目標,就是方便人類讀寫。它實質上是一種通用的資料序列化格式。它的基本語法規則如下 1 大小寫敏感 2 使用縮排表示層級關係 3 縮...

python中的檔案讀取

恢復內容開始 r模式,唯讀模式,不可寫入,檔案不存在會報錯 r模式,能讀不能寫,檔案不存在會報錯 f open a1.txt 不寫 r 預設唯讀 result f.readlines readlines讀所有,出來是乙個列表 f.seek 0 檔案指標返回第一行 result1 f.read rea...