python基础04day
一 引子
数据类型 | 用途 | 定义方式 | 是否多项 | 有/无序 | 可/不可变 | 对应状态 |
数字 | 否 | —— | 不可 | |||
字符串 | “”‘’“““””” | 否 | 有 | 不可 | ||
列表 | 【】 | 是 | 有 | 可 | 同类型数据 | |
字典 | 关键词 | {:} | 是 | 无 | 可 | 不同类型数据 |
元组 | 使函数可以返回多个值 | (), | 是 | 有 | 不可 | 压缩数据 |
集合 | 集运算 | set() | 是 | 无 | 可 | 关系运算、去重 |
布尔 | 否 | —— | 不可 |
二 数字
复数( (complex)) - 复数由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示, 复数的实部a和虚部b都是浮点型。
十进制(n)——>8进制(m):
m=oct(n),type(m):string
8进制(m)——>十进制(n):
n=int(‘m’,8)
三 字符串
四 列表
五 元组
元组属于不可变类型,每一个值可以是任意类型
六 字典
字典属于可变类型,key必须为不可变类型那个,value可以是任意类型
七 集合
集合属于可变类型,每一个值必须是不可变类型
八 数据类型总结
九 运算符
十 字符编码
1 # 临时文件——》内存 2 # 永久文件——》硬盘 3 # 打开编辑器——》将程序文件读取到内存 4 # 打开文本——》将硬盘文件读取到内存生成临时文件 5 # (ASCII——》)Unicode——》UTF-8(可变长编码)ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作 6 # 基于目前的现状,内存中的编码固定就是unicode,我们唯一可变的就是硬盘的上对应的字符编码。总结:内存中统一采用unicode,浪费空间来换取可以转换成任意编码(不乱码),硬盘可以采用各种编码,如utf-8,保证存放于硬盘或者基于网络传输的数据量很小,提高传输效率与稳定性。 7 # 乱码的两种情况: 8 #乱码一:存文件时就已经乱码 9 #乱码二:存文件时不乱码而读文件时乱码 10 # 总结: 11 #1、保证不乱吗的核心法则就是,字符按照什么标准而编码的,就要按照什么标准解码,此处的标准指的就是字符编码 12 13 #2、在内存中写的所有字符,一视同仁,都是unicode编码,比如我们打开编辑器,输入一个“你”,我们并不能说“你”就是一个汉字,此时它仅仅只是一个符号,该符号可能很多国家都在使用,根据我们使用的输入法不同这个字的样式可能也不太一样。只有在我们往硬盘保存或者基于网络传输时,才能确定”你“到底是一个汉字,还是一个日本字,这就是unicode转换成其他编码格式的过程了 14 # python2中的str类型就是python3的bytes类型
十一 文件处理
1 ''' 2 文件操作:python文件操作空间——》操作系统——》内存|硬盘 3 3 如何用文件 4 文件操作的基本步骤: 5 f=open(...) #打开文件,拿到一个文件对象f,f就相当于一个遥控器,可以向操作系统发送指令 6 f.read() # 读写文件,向操作系统发送读写文件指令 7 f.close() # 关闭文件,回收操作系统的资源 8 上下文管理: 9 with open(...) as f: 10 pass 11 12 一 文件的打开模式 13 r: 只读模式L(默认的) 14 w: 只写模式 15 a: 只追加写模式 16 17 二 控制读写文件单位的方式(必须与r\w\a连用) 18 t : 文本模式(默认的),一定要指定encoding参数 19 优点: 操作系统会将硬盘中二进制数字解码成unicode然后返回 20 强调:只针对文本文件有效 21 22 b: 二进制模式,一定不能指定encoding参数 23 优点: 24 25 ''' 26 27 #一 r: 只读模式L(默认的) 28 # 1 当文件不存时,会报错 29 # 2 当文件存在时,文件指针指向文件的开头 30 31 # with open('a.txt',mode='rt',encoding='utf-8') as f: 32 # res1=f.read() 33 # print('111===>',res1) 34 # res2=f.read() 35 # print('222===>',res2) 36 37 # print(f.read()) 38 # print(f.readable())可读? 39 # print(f.writable())可写? 40 # print(f.readline())行读 41 # print(f.readline()) 42 43 # for line in f: 44 # print(line) 45 46 # l=[] 47 # for line in f: 48 # l.append(line) 49 # print(l) 50 # print(f.readlines())读取所有行(直到结束符 EOF)并返回列表 51 52 # 二 w: 只写模式 53 # 1 当文件不存时,新建一个空文档 54 # 2 当文件存在时,清空文件内容,文件指针跑到文件的开头 55 # with open('c.txt',mode='wt',encoding='utf-8') as f: 56 # print(f.readable()) 57 # print(f.writable()) 58 # print(f.read()) 59 # 60 # f.write('哈哈哈\n') 61 # f.write('你愁啥\n') 62 # f.write('瞅你咋地\n') 63 64 # f.write('1111\n2222\n333\n4444\n') 65 66 # info=['egon:123\n','alex:456\n','lxx:lxx123\n'] 67 # for line in info: 68 # f.write(line) 69 # f.writelines(info)列表写多行 70 71 # with open('c.txt',mode='rb') as f: 72 # print(f.read()) 73 74 75 # with open('c.txt',mode='wb') as f: 76 # f.write('哈哈哈\n'.encode('utf-8')) 77 # f.write('你愁啥\n'.encode('utf-8')) 78 # f.write('瞅你咋地\n'.encode('utf-8')) 79 80 # 三 a: 只追加写模式 81 # 1 当文件不存时,新建一个空文档,文件指针跑到文件的末尾 82 # 2 当文件存在时,文件指针跑到文件的末尾 83 84 # with open('c.txt',mode='at',encoding='utf-8') as f: 85 # print(f.readable())可追加? 86 # print(f.writable()) 87 # f.read() 88 89 # f.write('虎老师:123\n') 90 91 92 # 在文件打开不关闭的情况下,连续的写入,下一次写入一定是基于上一次写入指针的位置而继续的 93 # with open('d.txt',mode='wt',encoding='utf-8') as f: 94 # f.write('虎老师1:123\n') 95 # f.write('虎老师2:123\n') 96 # f.write('虎老师3:123\n') 97 98 # with open('d.txt',mode='wt',encoding='utf-8') as f: 99 # f.write('虎老师4:123\n') 100 101 102 103 # with open('d.txt',mode='at',encoding='utf-8') as f: 104 # f.write('虎老师1:123\n') 105 # f.write('虎老师2:123\n') 106 # f.write('虎老师3:123\n') 107 with open('d.txt',mode='at',encoding='utf-8') as f: 108 f.write('虎老师4:123\n') 109 # 可读可写: 110 # r+t 111 112 # w+t 113 114 # a+t 115 116 with open('a.txt',mode='r+t',encoding='utf-8') as f: 117 # print(f.readable()) 118 # print(f.writable()) 119 msg=f.readline() 120 print(msg) 121 f.write('xxxxxxxxxxx\n') 122 # f.seek 123 # 文件内指针移动,只有t模式下的read(n),n代表的字符的个数 124 # 除此以外文件内指针的移动都是以字节为单位 125 # with open('a.txt',mode='rt',encoding='utf-8') as f: 126 # msg=f.read(1) 127 # print(msg) 128 129 # with open('a.txt',mode='rb') as f: 130 # msg=f.read(3) 131 # print(msg.decode('utf-8')) 132 133 134 # f.seek(offset,whence)有两个参数: 135 # offset: 代表控制指针移动的字节数 136 # whence: 代表参照什么位置进行移动 137 # whence = 0: 参照文件开头(默认的),特殊???,可以在t和b模式下使用 138 # whence = 1: 参照当前所在的位置,必须在b模式下用 139 # whence = 2: 参照文件末尾,必须在b模式下用 140 141 # with open('a.txt',mode='rt',encoding='utf-8') as f: 142 # f.seek(6,0) 143 # msg=f.read(1) 144 # print(msg) 145 146 # with open('a.txt',mode='rb') as f: 147 # f.seek(3,0) 148 # msg=f.read(3) 149 # print(msg.decode('utf-8')) 150 151 # with open('a.txt',mode='rb') as f: 152 # msg=f.read(3) 153 # # print(msg.decode('utf-8')) 154 # print(f.tell()) 155 # # f.seek(6,0) 156 # f.seek(3,1) 157 # msg1=f.read(3) 158 # print(msg1.decode('utf-8')) 159 160 161 # with open('a.txt',mode='rb') as f: 162 # msg=f.read(3) 163 # # print(msg.decode('utf-8')) 164 # print(f.tell()) 165 # # f.seek(6,0) 166 # f.seek(3,1) 167 # msg1=f.read(3) 168 # print(msg1.decode('utf-8')) 169 170 171 # with open('a.txt',mode='rb') as f: 172 # # f.seek(0,2) 173 # # print(f.tell()) 174 # f.seek(-3,2) 175 # msg=f.read(3) 176 # print(msg.decode('utf-8')) 177 178 179 180 # with open('access.log',mode='rb') as f: 181 # f.seek(0,2) # 当前位置是147bytes 182 # 183 # while True: 184 # line=f.readline() # 当前位置是196bytes 185 # # print(f.tell()) 186 # if len(line) == 0: 187 # # 没有新的一行内容追加进来 188 # pass 189 # else: 190 # # 有新的一行内容追加进来 191 # print(line.decode('utf-8'),end='') 192 193 194 # with open('access.log',mode='rb') as f: 195 # f.seek(0,2) # 当前位置是147bytes 196 # 197 # while True: 198 # line=f.readline() # 当前位置是196bytes 199 # if len(line) != 0: 200 # print(line.decode('utf-8'),end='') 201 202 with open('a.txt',mode='r+t',encoding='utf-8') as f: 203 f.truncate(6) 204 # with open('c.txt','r+t',encoding='utf-8') as f: 205 # f.seek(13,0) 206 # # f.write('在老男孩') 207 # f.write('h') 208 209 # 修改文件的方式一: 210 # 1 将文件内容由硬盘全部读入内存 211 # 2 在内存中完成修改 212 # 3 将内存中修改后的结果覆盖写回硬盘 213 214 # with open('d.txt',mode='rt',encoding='utf-8') as f: 215 # all_data=f.read() 216 217 # print(all_data,type(all_data)) 218 219 # with open('d.txt',mode='wt',encoding='utf-8') as f: 220 # f.write(all_data.replace('alex','dsb')) 221 222 223 # 错误的做法 224 # with open('d.txt',mode='rt',encoding='utf-8') as f1,open('d.txt',mode='wt',encoding='utf-8') as f2: 225 # all_data=f1.read() 226 # f2.write(all_data.replace('dsb','alex')) 227 228 229 230 # 修改文件的方式二: 231 # 1 以读的方式打开源文件,以写的方式打开一个临时文件 232 # 2 从源文件中每读一样内容修改完毕后写入临时文件,直到源文件读取完毕 233 # 3 删掉源文件,将临时文件重命名为源文件名 234 # import os 235 # 236 # with open('d.txt',mode='rt',encoding='utf-8') as read_f,open('.d.txt.swap',mode='wt',encoding='utf-8') as write_f: 237 # for line in read_f: 238 # write_f.write(line.replace('alex','dsb')) 239 # 240 # os.remove('d.txt') 241 # os.rename('.d.txt.swap','d.txt') 242 243 # 方式一: 244 # 优点: 在文件修改的过程中硬盘上始终一份数据 245 # 缺点: 占用内存过多,不适用于大文件 246 247 248 # 方式二: 249 # 优点: 同一时刻在内存中只存在源文件的一行内容,不会过多地占用内存 250 # 缺点: 在文件修改的过程中会出现源文件与临时文件共存,硬盘上同一时刻会有两份数据,即在修改的过程中会过多的占用硬盘,
十二 作业