首页 > 代码库 > python第三天:字符编码、文件操作、函数
python第三天:字符编码、文件操作、函数
作业问题回顾
表格化输出
主要考察字符串的expandtabs的方法,使用空格替换TAB。
百鸡百钱
百鸡百钱的主要是用进行多次判断,然后输出打印。
上课内容
字符编码
概念
编码是计算机用来将人类可读的字符存储成二进制信息而使用的一种格式。字符编码主要针对字符的编码。
python中相关的方法
decode:解码,将其他格式的数据转化为unicode格式的数据。转化以后就是Bytes类型的数据。Bytes的数据汉字会转化成字节码,而ascii码会转化成b‘meg’的形式。可以接参数,接的参数就是使用哪种字符编码进行解码。
encode:编码,将Unicode编码格式的数据(Bytes形式的)转化为其他的字符编码格式的数据。可以接参数,接的参数就是使用何种字符编码编码。
上面两种方法在网络编程的时候用的比较多。
py2和pyt3编码的区别
python2中字符串类型是Bytes类型,如果不指定编码,在不同的平台运行可能会出现乱码现象。
Python3当中,字符串类型默认是utf-8型的,而如果不执行的话在解释器中存储的字符串默认是UNICODE。
文件处理
打开文件
打开文件有两种方法:
1、创建一个文件对象,然后对这个文件对象进行操作。
f = open(‘test.txt’)
f.xxx
f.close
优缺点:优点是代码简单易读,缺点是代码量比较多,而且结构不清晰。
2.使用with打开一个文件对象,然后在子代码进行操作。
with open(‘b.txt’) as f,open(c.txt) as f1:
f.xxxx
f1.xxxx
优点:代码量较少,结构清晰。
只读模式和方法
如果打开文件的时候,不指定打开的方式,默认就是使用只读模式打开。只读模式的话只能读取文件的数据,不能对文件进行操作。
一些常用的方法:
seek:移动光标至指定的位置。
使用示例:seek(num,pat)
pat是模式,共有三种模式:0:从文件的开头开始移动光标。1:从光标的当前位置开始移动光标。2:从文件的末尾移动光标。其中0模式的话可以是任意打开方式。1和2模式的话必须以二进制的模式打开。
readlines():读取文件所有的内容划分成多个元素存到列表里面,元素是以/n为结尾的。
readline():一行一行的读取文件。
read():指定字符个数来读取文件内容。
tell():打印光标当前所在的位置。在文件断点续传的时候可能用的上。
插入模式和方法
打开文件时,在文件名后面记上参数’w’,就默认是以插入方式打开。这个模式打开的文件,如果原来有文件,就清空文件内容,如果原来没有文件,就新创建一个文件。
常用的方法:
truncate:切割文件,只保留从开始到指定位置的文件内容,其他的文件内容全部清空。
write:写入文件,将内容写入文件中。
writelines:写入文件,传送的参数是列表。
追加模式和方法
追加模式就是保留原文件的内容,然后在文件的最后追加文件内容。
write:写入文件,将内容追加到文件的后面。
更改文件
思路:更改文件的话,就是新建一个临时文件,将原来的文件的内容一行行的读,进行判断是否需要修改,需要修改的话就进行修改。然后再写到临时文件中。全部读完以后,再将临时文件的内容写回主文件。
代码示例:
import os
with open("test",encoding="utf-8") as f,open(".test1.swap",‘w‘,encoding="utf-8") as f1:
for n in f:
if "刀" in n:
n = n.replace("刀","剑")
f1.write(n)
with open("test",‘w‘,encoding="utf-8") as f, open(".test1.swap", ‘r‘, encoding="utf-8") as f1:
for n in f1:
f.write(n)
os.remove(".test1.swap")
断点续传
思路:在传输到一半的文件中,使用seek(0,2)和tell命令,判断光标移到的位置,并且返回值。然后完整的文件seek到那里继续读值。
代码示例
with open(‘test‘,encoding="utf-8") as f,open(‘test1‘,‘rb‘) as f1:
f1.seek(0,2)
size = f1.tell()
f.seek(size)
print(f.readlines())
函数
概念
在python中,函数分为两类,一类是内置函数,一类是自定义函数,自定义函数相当于是做一个工具,调用它就相当于是使用了这个工具一样。
在程序代码量较小的时候,不使用函数问题不是很大,但是当代码量上去了以后。维护的时候如果没有函数,会很麻烦。而且函数可以让代码更有结构感觉。
定义函数
定义函数的话使用def,一般定义函数做到以下几点,名字要有意义,易读。写函数主体之前一般要添加一些中文注释。介绍这个函数的功能,返回值一类的东西。
格式如下:
def fun_name():
“测试函数”
print(“hello world”)
使用函数
使用函数:使用定义好的函数。
一般有如下三种方式使用函数:
1.直接调用函数
直接调用函数,通常是调用无参函数时候的用法。
2.将函数返回值赋给变量
val = foo(),将函数的返回值赋给一个变量使用。
3.将函数作为参数放到另一个函数当中
将函数作为一个变量传给另一个函数。
max(max(20,10),30)
三元表达式: 将正确的返回值放在if的左边,条件不成立的加上else 写在if的右边。
eg:print(a) if a>b else print(b)
函数的返回值
函数返回值主要分为以下几种情况:
1.返回None:函数主体里面没有return,return里面什么都不写,直接return None。
2.返回单个值:直接在return后面接变量或者值。
3.返回多个值:return后面用逗号隔开,接受的话也要使用多个变量接收,如果不想用到这个变量又想节省内存空间可以使用_来接收。多个-,-,-,-,-,-可以用*-来表示。a,*-,b表示只接受第一个返回值和最后一个返回值。
函数参数
函数的参数分为形参和实参两种。
还可以根据表现形式分为五种类型:
1.位置参数(主要针对实参):
位置参数主要是指实参给形参的时候,按位置传递参数。
eg:
def foo(x,y,z):
print(x,y,z)
foo(1,2,3)
如果是按位置传递的参数,必须数量要对应上,而且顺序也要对应上。比如上面的例子就是把1赋给x,2赋给y,3赋给了z。
2.关键字参数(主要针对实参)
关键字参数主要是指实参在给形参传递数值的时候,可以精确的赋值。
eg:
def foo(x,y,z):
print(x,y,z)
foo(z=1,x=3,y=2)
上面的例子就是将x=3,y=2,z=1赋给形参,数量必须要对应上,但是位置可以不对应上。
关键字参数可以和位置参数混合使用,但是在传递的过程中,不能穿插使用,必须是位置参数在前,关键字参数在后。
3.默认参数(主要是针对形参)
在定义形参的时候,可以给形参定义一些默认的值,在实参没有给他传值的情况下,使用这些默认的值。
默认参数要放在其他的参数的后面。
4.不定长参数(主要针对形参)
不定长的参数主要的形式有*和**,*是接受所有的位置参数,形成一个元组,赋给*后面的变量。**是接受所有的关键字参数,形成一个字典,赋给**后面的变量。
eg:
def foo(x,y,*args,**kwargs):
print(args,kwargs)
5.命名关键字参数(不常用)
在使用变长参数以后,希望变长参数里面有一些自己需要的关键字参数。用这种形式
eg:
def foo(x,y,*,sex,heigh):
print(x,y,sex,heigh)
这种方式定义的话,如果不用关键字参数传输sex和heigh就会报错。
python第三天:字符编码、文件操作、函数