Python基礎:文件的操作

一、python可以在不導入任何模塊的情況下對文件完成讀、寫、追加,替換(稍複雜)。


二、打開文件:

        1、f = open('text.txt')

            這種方式打開,操作完後需要使用f.colse()關閉。

        2、with open('text.txt') as f:

            這種方式打開,運行完系統自動關閉,回收內存。建議使用。


三、文件打開模式:

        python操作文件的時候,默認是隻讀的,需要指定各種模式才能進行相應的操作,模式列表:

r
以只讀方式打開文件
r+
先讀,再寫模式
rb
以二進制格式只讀打開,圖片,視頻等文件
rb+
二進制格式,先讀再寫
a
以追加格式打開f.write(),在最後一行追加,文件不存在,創建文件。
a+
以讀寫格式打開f.write(),在最後一行追加,文件不存在,創建文件。
ab
和a區別於,二進制
ab+
和ab區別於,二進制
w
寫模式創建新文件,覆蓋原文件,不可讀
w+
寫讀模式,先寫再讀,創建新文件,覆蓋原文件
wb
和w區別於,二進制
wb+
和wb區別於,二進制


四、文件的常用方法:

f.read(num)
默認讀取整個文件,num可以設置設取的數據的大小(英文字符個數)
f.readlines(num)
默認讀取整個文件,並以行爲分隔符,返回值是一個列表,每行爲一個元素
f.readline(num)
每次運行讀取一行,最節省空間
f.write(str)
向文件寫入數據,str必須是字符串類型。
f.tell()
顯示當前指針位置,使用next()方法時不能使用tell()
f.seek(num)
設置指針位置,f.seek(0)文件開始,
f.flush()
強制把內存數據寫入到文件。默認程序運行結束才寫入
next(f)

逐行讀取文件,f是打開的文件對象,不能與tell()同時用,一般迭代器用

    print(read_file.tell())
OSError: telling position disabled by next() call

f.close()
關閉打開的文件,清除內存


例子1:

#假設文件test.txt內容如下
'''
0=000
1=100
2=200
3=300
4=400
5=500
6=600
7=700
8=800
'''
#1# 最省空間,最快的讀取方式
# read_file.readline(),每運行一次,自動讀取下一行
with open('file_text1.text', 'r') as read_file:
    f = read_file.readline()
    while f:                   # 在條件判斷中,None和False都是False,其餘爲True,歡迎補充
        print(f, end='')              
        f = read_file.readline()
# 注意end,因爲readline()讀取包含換行符,print默認也加空行符,所以會出現空一行


#2# 其它方法組合操作
with open('file_text1.text', 'r') as read_file:
    f = read_file.read(5)
    print(f)                    # 運行結果是0=000
    print(read_file.tell())     # 當前位置是5
    read_file.seek(22)          # 將指針移動到22
    print(read_file.readlines())# '=300\n' 從位置22開始以行爲元素,組成一個列表

例子2:

正常情況下,文件正常關閉時才把內存文件寫入,使用flush()可以把立即寫入文件。

使用with語句,只要跳出語句塊,自動關閉文件。

# input在with裏面
d = {}
with open('file_text1.txt', 'w') as file:
    for i in range(20):
        file.write(str(i) + '=' + str(i)+'00\n')
    s=input('-----停止!文件未關閉,找不到file_text1.txt-----:')
    
    
# 把input移動到with外面    
d = {}
with open('file_text1.txt', 'w') as file:
    for i in range(20):
        file.write(str(i) + '=' + str(i)+'00\n')
s=input('-----停止!文件正常關閉,可以找到file_text1.txt-----:')


# 使用flush(),可以打開'file_text1.txt',每行都會立即寫入
d = {}
with open('file_text1.txt', 'w') as file:
    for i in range(20):
        file.write(str(i) + '=' + str(i)+'00\n')
        file.flush()
        s=input('-----停止!有文件,有內容-----:')

例子3:

修改文件:

文件只有讀,寫,追加,沒有修改方法。

如果要修改只能讀取到內存修改再覆蓋回去。

對於大文件,這種方法十分佔內存,可能會造成死機。

所以,按行讀取,修改後存入臨時文件,是一個好方法!

temp_file, source_file = 'temp_info.txt', 'info.txt'
# 同時打開兩個文件
with open(temp_file, 'w', encoding='utf-8') as temp_file_write,\
        open(source_file, 'r', encoding='utf-8') as file_read:
        file_read_line = file_read.readline()
        while file_read_line:
            temp_file_write.write(file_read_line)
            file_read_line = file_read.readline()
            
            
# 然後再把上面的temp_file和suorce_file換個位置,寫回去就好了,是不是發現點什麼?仔細思考吧:)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章