07 Python 文件操作,encode,函数

  • 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)

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值