天天看點

13. Python 檔案操作

1.      簡單的讀取檔案内容(codecs的使用)

目前目錄下有個1.txt的文檔

打開檔案的步驟:

    import codecs

(1)open檔案

    f = codecs.open('1.txt')

(2)檔案操作(讀或寫)

    print (f.read())

(3)關閉檔案

    f.close()

結果如下:

<a href="https://s5.51cto.com/oss/201710/27/88ed8dd2b331713e6ead2994b8ab2674.png" target="_blank"></a>

這個方法等于把整個檔案拿出來,當成一個字元串來使用,後期用正則比對的時候,非常友善、适用。

【codecs 這個子產品,是open打開檔案的時候,引入這個子產品,用途:解決檔案亂碼的。推薦以後在讀寫的時候使用這個子產品】

如果設:

    text = f.read()

檢視text的類型:

    print (type(text))

檢視到類型是"str"(字元串)

類型是字元串,我們就可以使用字元串的方法:

    result = text.replace('1', 'A')

    print (result)

2.      寫入一個新的檔案

import codecs

f = codecs.open('2.txt', 'w')

f.write('hello world!\n')

f.write('hello {0}!\n'.format('LLN'))

f.write('you cool!\n')

f.write('I like it!\n')

f.close()

注釋:

# open(filename, mode)

# mode有幾個參數:

    r 讀取

    w 寫入

    b 二進制

    a 追加

3.     檔案操作常用用法

readlins() 方法:

此方法,讀取檔案,把每一行都變成單獨的字元串,并放入到一個清單中去,第一行為清單的第一個元素,以此類推。

舉例:

f = codecs.open('1.txt', 'rb')

t_list = f.readlines()

print (t_list[0]

print (f.readlines())

傳回結果:

1111111111 第一行

[]

為什麼 print (f.readlines()) 會傳回空清單?

因為之前readlines()已經将檔案讀到末尾了,下次再用readlines()方法讀的時候,會從文章最末尾開始讀取,是以結果為[]。

readline() 方法:

此方法,讀取檔案,每一個readline()隻讀取一行,光标會停留在下一行的開頭;

在執行下一個readline()的時候,會從光标處讀取目前這一行。

print (f.readline())

1111111111

aaaaaaaaaa

2222222222

bbbbbbbbbb

3333333333

next()方法:

對比:

readline() 讀取檔案一行内容,傳回一個字元串

next() 讀取檔案下一行内容傳回一個字元串

write()方法和writelines()方法:

write() 必須傳入一個(整個)字元串

writelines() 必須傳入一個序列

舉例1:

f = codecs.open('2.txt', 'wb')

f.write('hello lili\n cccccccc\n aaaaaaaaaa\n')   ## 一個整的字元串

可以看到多出來一個檔案:

<a href="https://s1.51cto.com/oss/201710/27/6507bdf01a81599da6bbac9cec4fbd81.png" target="_blank"></a>

檔案内容:

<a href="https://s1.51cto.com/oss/201710/27/b6cc42cf2ca0d2ab0e695229fab046d1.png" target="_blank"></a>

舉例2:

f.writelines(['aaaaa\n','bbbbbbbb\n','cccccccc']) ##傳入一個清單(序列)

可以看到多出來一個檔案的内容:

<a href="https://s4.51cto.com/oss/201710/27/5cfa3041723de9997e3016db1c9f5143.png" target="_blank"></a>

tell()方法:

提示目前光标落在哪個字元位置上

f = codecs.open('3.txt', 'wb')

f.writelines(['aaaaa\n','bbbbbbbb\n','cccccccc'])

print f.tell()

傳回:

23

seek()方法:

指定光标的位置,seek(0)是移動到文章開頭

f.writelines(['aaaaaaaaaaaaaaa\n','bbbbbbbbbbbbb\n','cccccccc\n'])

f.seek(0)

f.write('sssssssssssssssss') ##重新寫入

sssssssssssssssssbbbbbbbbbbbb

cccccccc

從結果看出,将光标移動到開頭後,并在開頭寫入字元串,并替換掉原有字元串對應的位置的字元,檔案總長度不變。

4.with的特殊用法

with codecs.open('1.txt', 'rb') as f:

這種方法不需要寫close(),在執行完成後,會自動關閉檔案。

拓展:

列印檔案指定行的内容:

方法一:

    for line, value in enumerate(f):

        if line == 4-1: #列印第四行的内容,下标為3

            print (value)

方法二:(python有個自帶的方法)

import linecache

count = linecache.getline(filename,linenum)

count = linecache.getline('1.txt',4)   ##下标為3

print count

本文轉自 聽丶飛鳥說 51CTO部落格,原文連結:http://blog.51cto.com/286577399/1976728