一.高效文件讀寫:
當文件過大時,可以使用 for line in f: 的方式進行逐行讀取,直接循環文件對象,每次循環的時候就是讀取的每一行數據
line=line.strip() 去掉換行符
line=line.split(''')將每行數據以某個字符分割,分割完成后,轉換成list數據
二.文件操作:
1.為了減少磁盤和內存的交互次數,增加了數據緩沖區,當緩沖區中的數據寫滿時,才會將緩沖區中的數據寫到磁盤當中
f=open('111','w',encoding='utf-8')
f.write(',')
f.flush()#將緩沖區里邊的數據立即寫到磁盤上,不等緩沖區滿
f.close()
2.與上邊方法不同,文件的另一種打開方式為:
with open('111','w',encoding='utf-8')as f1,open('222','r',encoding='utf-8') as f2: #打開文件,不用再執行f.close,可打開多個文件
3.文件修改方式:
(1)簡單粗暴的方式
# 1.先獲取到文件里的所有內容
# 2.然后修改內容
# 3.清空原先的所有內容
# 4.重新寫入
f=open('111','a+',encoding='utf-8')
f.seek(0)
data=f.read()
new_data=data.replace('123','python')
f.read(0) #read完以后指針到了最后
f.truncate() #清空所有內容
f.write(new_data)
f.flush()
f.close()
(2)高效的處理方式
# #word word——nwe
# 1.先打開原來的文件,再打開一個空文件
# 2.循環處理原來的文件里邊的每一行數據,處理完成,生成新文件
# 3.把原來的文件刪除,把新文件的名字改成原來的名字
import os
with open('word',encoding='utf-8') as fr,open('.word','w',encoding='utf-8') as fw:
for line in fr:
line=line.lstrip() #去掉左邊的空格
if line: #判斷這一行是否有數據
line=line.replace('你','you') #替換數據
fw.write(line) #寫到新文件
os.remove('word')
os.rename('.word','word')
三.集合
集合的格式為:nums={1,2,3,4,1,1,1} 當print(nums)時,輸出{1,2,3,4},集合有自動去重的功能,同時集合和字典一樣也是無序的,所以不能支持下標(索引)取值
for n in nums:
print(n) 支持for循環取出每行數據
定義空集合:null_set=set(),如果set={}則是定義了一個空字典
list = [1,2,3,4,5,3,6]
list_2 =[2,3,5,7,8]
list=set(list)
list_2 = set(list_2)
print(list.intersection(list_2),'交集 ') #交集 取出重復數據 {2, 3, 5}
print(list.union(list_2),'並集') # 並集 去重-統一展示 {1, 2, 3, 4, 5, 6, 7, 8}
print(list.difference(list_2),'差集') #差集-取出list中有 list_2 沒有 {1, 4, 6}
list_3 = set([1,3,6])
print(list_3.issubset(list)) #子集 list_3 的值在list 全有 全有時返回True,反之返回False
print(list.issuperset(list_3)) #父集 list是list_3的父集時,返回True,反之返回False
print(list.symmetric_difference(list_2)) # 對稱差集 lsit 和 list_3 互相沒有的 返回結果{1, 4, 6, 7, 8} 效果相當於,合並后去除重復的
print(list & list_2) #交集
print(list | list_2) # 並集
print(list -list_2) #差集
print(list ^ list_2) # 對稱差集
list.add(777) #一次添加一個
list.update([888,999])#同時添加多個
list.remove(999)#刪除指定的,沒有找到時報錯
list.pop()#隨機刪除一個
list.discard(888) # 刪除一個指定的,不存在時 不會報錯
四.json處理
json是一個字符串,只不過長得像字典,json里邊只能用雙引號
import json
user_info='''
{"aaa":"123456","aa":"123"}
'''
user_dic=json.loads(user_info) #把json串(字符串)轉成字典
stu_info={'laowang':{'cars':['BMW','BEM-Z']}}
stu_str=json.dumps(stu_info) #把字典轉成json(字符串) 命令帶s的是在操作字符串,如:loads和dumps,如果在josn中轉換的中文是ascii碼,可以在list文件名后邊加上 “ensureascii=False”
fw =open('stu','w',encoding='utf-8')
json.dump(stu_info,fw,indent=4) #dump操作文件,不需要自己write了,人家幫你寫入文件,indent=4設置格式,加4個縮進,值為4和8都可以
f=open('stu')
res=json.load(f) #直接從文件里拿,不需要再讀一次文件了
print(res)
五.函數
函數就是一個功能,一個方法,用來簡化代碼
def 函數名(參數):函數體 函數名不能是關鍵字,函數不能以數字開頭;
def say(name,sex='男'): #函數,形參,形式參數就是一個變量
#name 必填參數 未知
#sex 默認值參數 非必填 調用時若填寫就傳填寫值,沒有填寫就用默認值
print('%s hahah'%name)
say('aaa') #實參,實際參數
函數必須調用才能執行,函數名后邊加()就是調用他
在函數里邊的變量都是局部變量,函數執行結束就沒有這個變量了
def calc(a,b):
res = a * b
return res 返回計算結果值,不返回時得不到結果
cur_money=200
nx=calc(100,120) 定義一個變量來接收返回結果
print(nx+cur_money)
如果需要用到函數的處理結果的話,name就寫return,不需要的話就不寫,不寫默認返回none
函數里邊如果碰到return,函數立即結束
def my_file(name,content=None):
with open(name,'a+') as f:
f.seek(0)
if content:
f.write(content)
else:
return f.read()
#一個函數只做一件事
#重復的代碼就是低級的
#實現同樣的功能,代碼越少越好