python文件操作

1、打開文件獲取文件
2、通過文件句柄操作文件
3、關閉文件
先來看看讀取文件內容:
原文件是.txt的文檔,讀取裏面的內容:

f = open('file.txt','r+',encoding='utf-8') #以只讀方式打開文件內容
frist_line = f.readline()#獲取文件的第一行內容,返回的是一個list
print(frist_line)#打印第一行

這裏寫圖片描述
讀取剩下的內容:

res = f.read()#獲取除了第一行剩下的所有文件內容
print(res)
f.close()#關閉文件

結果顯示爲
打開文件時,需要指定文件路徑和以何等方式打開文件,打開後,即可獲取該文件句柄,後面通過此文件句柄對該文件操作,打開文件的模式有:

f.readable()     # 判斷文件是否可讀
f.writable()  # 判斷文件是否可寫
f.encoding  # 打印文件的編碼
f.read()  # 讀取所有內容,大文件時不要用,因爲會把文件內容都讀到內存中,內存不夠的話,會把內存撐爆
f.readlines()  # 讀取所有文件內容,返回一個list,元素是每行的數據,大文件時不要用,因爲會把文件內容都讀到內存中,內存不夠的話,會把內存撐爆
f.tell()  # 獲取當前文件的指針指向
f.seek(0)  # 把當前文件指針指向哪
f.write('愛情證書')  # 寫入內容
f.flush()  # 寫入文件後,立即從內存中把數據寫到磁盤中
f.truncate()  # 清空文件內容
f.writelines(['愛情', '孫燕姿'])  # 將一個列表寫入文件中
f.close()#關閉文件

這裏寫圖片描述

f.writelines(['愛情', '孫燕姿'])  # 將一個列表寫入文件中
f.close()#關閉文件

寫入文件這裏寫圖片描述
文件較大時用read()和readlines()方法操作文件的話,會先把文件所有內容讀到內存中,內存數據一多,非常卡,高效的操作,就是讀一行操作一行,讀過的內容就從內存中釋放了

f = open('file.txt','r+',encoding='utf-8')
for line in f:
    print(line)
        #這樣的話,line就是每行文件的內容,讀完一行的話,就會釋放一行的內存

這裏寫圖片描述
with使用:對文件操作過程中經常忘了關閉文件,with的使用是自動關閉該文件,使用方式如下:

with open('file.txt', 'r',encoding='utf-8') as f:  # 打開一個文件,把這個文件的句柄付給f
    for line in f:
        print(line)

這裏寫圖片描述
修改文件:一種是把文件的全部內容都讀到內存中,然後把原有的文件內容清空,重新寫新的內容,單文件的內容可以增加;第二種是把修改後的文件內容寫到一個新的文件中
eg1:

with open('file.txt', 'r+',encoding='utf-8') as fr:
    res = fr.read()
    new_res = res.replace('我', 'me')
    fr.write(new_res)

這裏寫圖片描述
eg2:

with open('file.txt',encoding='utf-8')as fr,open('file_bak', 'w',encoding='utf-8') as fw:  # 這個是多文件的操作,打開兩個文件,fr是讀file.txt,fw是新建一個file_bak文件
    for line in fr:  # 循環file.txt中的每一行
        new_line = line.replace('我', 'me')
        fw.write(new_line)  # 寫到file_bak文件中

這裏寫圖片描述
集合:
集合也是一種數據類型,一個類似列表東西,它的特點是無序的,不重複的,也就是說集合中是沒有重複的數據。集合的作用:
1、它自動去一個列表中重複的數據,而不需要你再寫判斷
2、可以做關係測試,比如說有兩波人,一波喜歡蘋果,一波喜歡葡萄,既想吃葡萄又想吃蘋果的人,就可以用集合
定義集合

list = [2,3,1,2,3,4]
l=set()    #定義空集合
s_list = set(list)#這樣就定義了一個集合
set1 = set([1,3,4,5,6])#這種方式和上面的都是把list轉換成一個集合
set2={'hehe','hehe1','hehe3'}#這種方式是直接定義一個集合
print(s_list)
print(set1)
print(set2)

這裏寫圖片描述

list1 = {1, 2, 3, 4, 5, 6, 9}
list2 = {2, 3, 4, 6, 1}
list3 = {1, 2, 3}
print(list1.intersection(list2))  # 取交集,也就是取list1和list2中都有的
print(list1 & list2)# 取交集
print(list1.union(list2))  # 取並集,也就是把list1和list2合併了,然後去除重複的
print(list1 | list2)# 取並集
print(list1.difference(list2))  #取差集 在list中存在,在list2中沒有的
print(list1 - list2)
print(list3.issubset(list1))#判斷list3是不是list1的子集
print(list1.issuperset(list3))#判斷list1是不是list3的父集
print(list1.isdisjoint(list3))#判斷list1和list3是否有交集
print(list1.symmetric_difference(list2))#對稱差集,輸出兩個列表中都沒有的值,也就是把兩個集合中相同的去掉
print(list1 ^ list2)

這裏寫圖片描述

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