一.高效文件读写:
当文件过大时,可以使用 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()
#一个函数只做一件事
#重复的代码就是低级的
#实现同样的功能,代码越少越好