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...