- Set
https://blog.csdn.net/qq_29756987/article/details/88667360
- 文件操作
1.在使用open时,因为Python的默认编码格式为GB2132,所以需要转换为相对应的编码格式,否则有可能会报错。
f = open("python.txt", encoding="uft-8")# 文件句柄
f.read()
2.不同变量记录同一个句柄的时候,在没有手动改变光标位置前,第二次不会显示,可以理解为第一次文件读完后,光标在末尾,第二次从文件尾开始读。
# 假设python.txt内容为'Hello World'
f = open('python.txt', encoding='utf-8')
data1 = f.read()
data2 = f.read()
print(data1,data2)
=>Hello World
3.open的正确读写形式应该指定文件名,编码格式,读写模式
f = open('python.txt', 'r+', encoding='utf-8')
data = f.read()
print(data)
f.close()
4.读操作
'r'只读
f = open('python.txt', 'r', encoding='utf-8')
data = f.read()
print(data)
f.close()
=>Hello World
'r+'读写
f = open('python.txt', 'r+', encoding='utf-8') # 文件句柄
print(f.readline())
print(f.readline())
print(f.readline())
f.write('insert a mark') # 会在文本末尾插入一段字符串
f.close()
'rb'二进制文件的写入,网络通信都是二进制
'rb'
5.写操作
'w'创建文件写入
f = open('python.txt', 'w', encoding='utf-8')
f.write('\nHello Python!')
f.close()
这里注意,这里用的只读的方法,所以在open之后如果去做度的操作就会报错;此时写的话会覆盖原先的文件内容。
'w+'写读,不常用
f = open('python.txt', 'w+', encoding='utf-8')
print(f.readline()) # 在写读的情况下,文件会先写在读,如果直接读取的话得到的会是空文本
print(f.readline()) # 这里也会读到空文本
f.write('insert a mark') # 写入
f.close()
'wb'二进制的写入
f = open('python.txt','wb')
f.write('insert a string'.encode('utf-8'))
f.close()
6.追加操作
f = open('python.txt', 'a', encoding='utf-8')
f.write('\nHello C#!')
f.close()
7.read/readline
read(),会读取文件中所有的内容;readline(),一行一个行的读。
f = open('python.txt', 'r', encoding='utf-8')
# 这样在读取大文件有可能会很占用内存
for line in f.readlines():
print(line.strip())# strip删除文本中空格和换行
# 效率最高 f为迭代器,不是一个列表
for line in f:
print(line)
f.close()
8.tell/seek/seekable
tell将当前句柄所在的指针打印出来(可以想象为光标位置);seek句柄回到指定位置;seekabel不是所有的句柄都是可以移动的,判断文件是否可以移动光标(Linux下一切皆文件)
f = open('python.txt', 'r', encoding='utf-8')
print(f.tell())
print(f.read(5)) #读取5个字符
print(f.tell())
f.seek(0) # 回到最开始位置
print(f.tell())
=>0 5 0
9.encoding打印当前文件编码
10.fileno返回当前文件在内存的编号
11.readable判断文件是否可读
12.flush
13.with
with open('python.txt', 'r', encoding='utf-8') as f: #with open(open1) as f, open2 as f2:
for line in f:
print(line)
#ps.python规范要求单行不能超过80个字符,所以会出现一下换行方式:
with open('python.txt', 'r', encoding= 'utf-8') as f,\
open('python.txt', 'r', encoding= 'utf-8') as f2:
for line in f:
ptint(line)
14.编码解码
# 假设s_to_unicode的编码格式为utf-8
s_to_unicode = s.decode("utf-8")
s_to_gbk = s_to_unicode.encode("gbk")
# 任何编码格式互相装换都需要先转为万国码unicode,再通过unicode转为相对应的编码格式
# ps.英文为2个字节 中文为3个字节
str_unicode = u'这个编码格式为unicode'
- 函数
# 函数的定义
def fun(x):
'''文件描述'''
x+=1
return x
#def:函数的关键字
#fun:函数名
#():参数
返回值个数为0:返回None
返回值个数为1:返回object
返回个数大于1:返回tuple
如果返回值为一个函数,则返回的是函数的地址
1.位置参数:调用函数时根据函数定义的参数位置来传递参数。
2.关键字参数:用于函数调用,通过“键-值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。
关键字参数不可以写在位置参数的前面
def func(x, y, z):
print(x)
print(y)
print(z)
func(1,2,3) #✔
func(y=2, x=1, z=3) #✔
func(x=1,2,3) #✖ 关键字参数不可以在位置参数的前面
func(1,z=2,y=3) #✔
func(1,x=1,z=3) #✖ x被指定2次
3.默认参数:为参数提供默认值,调用函数时可传可不传。
def func1(x,y=2):
print(x)
print(y)
func1(1)
4.参数组:*args
def func(*args):
print(args)
func(1,2,3,4,5)
func(*[1,2,3,4,5])
=>print(1,2,3,4,5)
5.字典:**kwargs
def func(**kwargs):
print(kwargs)
func(key = 'key1', value = 'value1')
func(**{'key':'key1','value':'value1'})
=>{'key': 'key1', 'value': 'value1'}
当然function中也可以参数当作字典来取值,当然不建议
def func(**kwargs):
print(kwargs)
print(kwargs['name'])
func(key = 'key1', value = 'value1')
func(**{'key':'key1','value':'value1'})
kwargs的具体用法
1.与位置参数结合使用:
def func(name, **kwargs):
print(name)
print(kwargs)
func('kun', age='18',sex='male')
=>kun
=>{'age': '18', 'sex': 'male'}
2.与默认参数结合使用:
def func(name, age= 18, **kwargs)#✔
def func(name, **kwargs, ags= 18)#✖
3.多种参数混合使用:
def func(name, *args,**kwargs):
print(name)
print(args)
print(kwargs)
func('kun', 1,2,3,4,age='18',sex='male')
- 递归
为了避免内存被撑爆python中递归次数不超过998次。
递归特性:1.不许有一个明确的结束条件;2.每次进入更深一层递归时,问题规模相比上次递归都应有所减少;3.执行效率低下
- 高阶函数
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收一个函数作为参数,这种函数就称之为高阶函数
def add(x,y,f):
return f(x) + f(y)
res = add(3,-6,abs) #abs为绝对值
print(res)
#相当于 return abs(3)+abs(-6)