一. 字符编码
1.字符编码:
人能识别的语言 对应 计算机的语言, 一一对一,参考的就是字符编码
ASCII码表 1bytes=8 bit -------->256 位字符
GBK编码 2bytes代表一个字符
unicode万国语言 统一2 bytes代表一个字符 优 点:转换速度快,占用空间大 内存‘读’一般用unicode,但在执行阶段,可变成其他代码。
UTF-8 可变长的编码 英文:1bytes 中文:3bytes 转换速度慢,占用空间小 硬盘与网路运输‘读’用UTF-8
文件按什么编码存,按什么解开就不乱码。
硬盘存储的是二进制
windows 默认编码是GBK
python2 <ASCII>
python3 <utf-8>未执行时没有字符串的概念, 默认把字符串默认成unicode的二进制格式
#coding:utf-8 #告诉以什么方式读
乱码:在存的时候乱码,无解。
读的时候乱码,可以换字符编码。
二:文件管理操作
操作硬盘无非是读与写,但是不能直接操作,操作系统为你提供了文件管理系统,而文件管理系统里是一个个的文件,所以你想对文件的具体操作,得以文件为单位进行操作,而python只是一个应用程序不能直接操作硬件 ,而读写硬盘是一种操作硬件的操作,所以只能想操作系统发起系统调用,让操作系统为我们调用硬盘。
python里为用户提供了open()的操作指令,来发起系统调用,操作文件。
格式:
f=open('a.txt','r',encoding='utf-8') f 相当于操作系统的返回值 /encoding告诉以什么方式打开/'r',默认是以读的方式。
r模式,默认模式,文件不存在则报错 #读写模式可以以绝对路径的方式打开文件
w模式,文件不存在创建,文件存在则覆盖
a模式 文件不存在则创建,文件存在不会覆盖,写内容是追加的方式
文件操作命令:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
f=open('a.txt','r',encoding='utf-8') #rb/wb 以b方式打开时,读取到的内容是字节类型,写入时也需要提供字节类型,不能指定编码 f.read() #读取所有内容,如果文件太大则影响内存 f.readline #读取一行的内容 f.readlines() #读取所有行,以列表的形式保存 f=open('a.txt','w',encoding='utf-8') f.write() #写内容,必须写的方式打开 f.close() f.flush #把内存书数据刷到硬盘 f.truncate() #截断,以字节为单位截取 f.seek(m,n) #移动光标,以文件开头开始 seek读的是字节,中文一个字是三个字节 #n=0从开始seek n=1 从当前开始seek n=2 从最后开始seek 上下文管理: with open('a.txt','w') as f: pass with open('a.txt','r') as read_f,open('b.txt','w') as write_f: data=read_f.read()
#r w a rb wb ab b------------>binary二进制 rb ----->以二进制的方式读
硬盘没有修改的概念,只能覆盖
内存才可以修改
import os 模块 覆盖原文件
os.remove('a.txt') 删除文件
os.rename('b.txt','a.txt') 重命名
修改文件名操作:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
import os with open('a.txt','r',encoding='utf-8') as read_f,\ open('.a.txt.swap','w',encoding='utf-8') as write_f: for line in read_f: if line.startswith('hello'): line='哈哈哈\n' write_f.write(line) os.remove('a.txt') os.rename('.a.txt.swap','a.txt')
三:函数
1.为何要有函数?
不加区分地将所有功能的代码垒到一起,问题是:
代码可读性差 代码冗余 代码可扩展差
如何解决?
函数即工具,事先准备工具的过程是定义函数,拿来就用指的就是函数调用
结论:函数使用必须是:先定义,后调用
python中函数定义:函数是逻辑结构化和过程化的一种编程方法。
1 python中函数定义方法: 2 3 def test(x): 4 "The function definitions" 5 x+=1 6 return x 7 8 def:定义函数的关键字 9 test:函数名 10 ():内可定义形参 11 "":文档描述(非必要,但是强烈建议为你的函数添加描述信息) 12 x+=1:泛指代码块或程序处理逻辑 13 return:定义返回值 调用运行:可以带参数也可以不带 函数名()
#函数的使用:先定义,后调用
#如何定义函数之定义函数的三种形式
#1 定义无参函数:函数的执行不依赖于调用者传入的参数就能执行时,需要定义为无参函数
# def print_tag(): # print('*************************') # def main(): # print_tag('*',20,3) # print_msg('hello world') # print_tag('*',20,3) # # main()
#2 定义有参数:函数的执行需要依赖于调用者传入的参数才能执行时,需要定义为有参函数
# def print_tag(tag,count,line_num): # for i in range(line_num): # print(tag*count)
#3 定义空函数:函数体为pass
# def func(x,y,z):
# pass