python文件操作与编解码

1 # 文件操作 2 3 ''' 4 1.文件路径:要知道文件的路径 5 6 2.编码方式:要知道文件是什么编码的。utf-8 gbk...... 7 8 3.操作方式:要以什么样的方式进行打开这个文件,比如是只读打开、可读可写打开、追加、 9 10 r:只读 11 12 rb:二进制方式只读方式打开一个文件 13 14 w:只写,打开文件默认会将文件内容全部删除 15 16 wb:二进制方式只写。bytes类型,打开文件默认会将文件内容全部删除 17 18 a:只追加 19 20 ab:以二进制方式追加进去,bytes类型 21 22 r+:可读可写 23 24 r+b: 二进制方式可读可写,以bytes类型。bytes类型编码是utf-8或gnk的编码 25 26 w+:可写可读,打开文件默认会将文件内容全部删除 27 28 w+b:二进制方式可写可读, 打开文件默认会将文件内容全部删除 29 30 a+:可追加可读 31 32 a+b:二进制方式可追加可读 33 ''' 34 35 # open 完以后会创建一个文件句柄,只读方式,以utf-8编码方式打开一个文件,得到这个文件的描述符对象 36 # encoding可以是utf-8、gbk、gb2312等,文件是什么编码保存的,这里就以什么编码方式打开 37 # f = open('测试.txt', mode='r', encoding='utf-8') # 只读 38 # 39 # content = f.read() # 40 # 41 # print(content) 42 # 43 # f.close() 44 # 45 # # 以bytes类型,二进制方式只读方式打开一个文件 46 # f = open('测试.txt', mode='rb') #不用加encoding的原因是因为有b,属于bytes类型,默认就是utf-8的二进制 47 # 48 # content = f.read() 49 # 50 # print(content) 51 # 52 # f.close() 53 # 54 # # 只写打开操作一个文件,没有这个文件,则会创建这个文件。有这个文件则会将源文件的内容删除后再进行写 55 # f = open('测试1.txt', mode='w', encoding='utf-8') # 只写 56 # f.write('高') 57 # f.close() 58 # 59 # 60 # # 只写打开操作一个文件,没有这个文件,则会创建这个文件。有这个文件则会将源文件的内容删除后再进行写 61 # f = open('测试1.txt', mode='wb') # 字节二进制的方式写 62 # f.write(b'7891234') # 必须加b,表示以bytes类型写入,utf-8。 如果不加b,就是str类型,str编码方式是unicode,不加b不行 63 # f.write('中文'.encode('utf-8')) 64 # f.close() 65 # 66 # 67 # # 追加 68 # 69 # f = open('测试1.txt', mode='a', encoding='utf-8') 70 # f.write('中文舒服舒服') 71 # f.close() 72 # 73 # # 追加,二进制bytes类型追加、utf-8、gbk。 bytes类型是utf-8或gbk编码方式的 74 # f = open('测试1.txt', mode='ab') 75 # f.write('123456'.encode('utf-8')) 76 # f.close() 77 78 # 可读可写, 79 # f = open('测试1.txt', mode='r+', encoding='utf-8') 80 # print(f.read()) # read后,光标会到最后一个字符位置 81 # f.write('777') # 会从光标位置开始写,写完后停留在写完的位置 82 # print(f.read()) # 从光标位置开始读,读到最后,光标停留在最后 83 # f.close() 84 85 # f = open('测试1.txt', mode='r+b') 86 # print(f.read()) # read后,光标会到最后一个字符位置 87 # f.write('1234567'.encode('utf-8')) # 会从光标位置开始写 88 # print(f.read()) # 从光标位置开始读,读到最后,光标停留在最后 89 # f.close() 90 91 # f = open('测试1.txt', mode='w+', encoding='utf-8') # 打开后先全部清除了文件内容 92 # print(f.read()) # read后,光标会到最后一个字符位置,但是因为先清除了所以什么都没有 93 # f.write('1234567') # 会从光标位置开始写 94 # print(f.read()) # 从光标位置开始读,读到最后,光标停留在最后,什么都没有 95 # f.close() 96 97 # 可写可读 98 # f = open('测试1.txt', mode='w+', encoding='utf-8') # 打开后先全部清除了文件内容 99 # print(f.read()) # read后,光标会到最后一个字符位置,但是因为先清除了所以什么都没有 100 # f.write('1234567') # 会从光标位置开始写 101 # f.seek(0) # 光标调到最开始 102 # print(f.read()) # 从光标位置开始读,读到最后,光标停留在最后,有内容了 103 # f.close() 104 105 106 # 功能详解 107 108 # f = open('测试1.txt', mode='r+', encoding='utf-8') # 打开后先全部清除了文件内容 109 # f.seek(3) # 光标的移动是按照字节算的,如果文件里是中文,并且如果是utf-8编码,那么一个中文是3个字节。utf-8一个英文或其他ascii是一个字节 110 # print(f.read(8)) # 读多少个字符,注意:是字符,不是字节。如果文件里是中文这两个字,读2就是中文 111 # 112 # print(f.tell()) # 得到光标的当前位置 113 # print(f.readable()) # 判断文件是否可读的 114 # print(f.writable()) # 判断文件是否可写 115 # f.seek(0) 116 # # print(f.readline()) # 一行一行读 117 # print(f.readlines()) # 读取多行,每行作为list的元素放入到list中,返回list类型 118 # f.truncate(4) # 将源文件拆剪,前4个 119 # print(f.read()) 120 # 121 # 122 # f.close() 123 124 # f = open('测试1.txt', mode='r+', encoding='utf-8') 125 # 126 # # 遍历文件,一行一行的打印 127 # for line in f: 128 # print(line) 129 # 130 # f.close() 131 132 # 另外一种文件操作,close可以无需关心,close自动关闭, with是关键字,在缩进中操作 133 with open('测试1.txt', mode='r+', encoding='utf-8') as f: 134 print(f.read()) 135 136 # 另可以同时打开多个,在缩进中操作 137 with open('测试1.txt', mode='r+', encoding='utf-8') as f, \ 138 open('测试.txt', mode='r+', encoding='utf-8') as f1: 139 print(f.read()) 140 print(f1.read()) 141 142 143 144 145 146 # 小练习:注册与登录 147 148 # 注册:将注册的用户名和密码写入到一个文件中,然后提示注册成功 149 150 # 登录:等待用户输入的用户名和密码,然后和文件中的注册用户名和密码进行比较,匹配则登录成功

1 username = input('请输入你要注册的用户名:') 2 password = input('请输入你要注册的密码:') 3 4 with open('list_of_info', mode='a', encoding='utf-8') as f: 5 f.write('{}\n{}'.format(username, password)) 6 7 print('注册成功') 8 9 count = 0 10 11 getusername = '' 12 getpassword = '' 13 lis = [] 14 while count < 3: 15 getusername = input('请输入你的用户名:') 16 getpassword = input('请输入你的密码:') 17 18 with open('list_of_info', mode='r+', encoding='utf-8') as f: 19 lis = f.readlines() 20 print(lis) 21 if getpassword == lis[0].strip() and getpassword == lis[1].strip(): 22 print('登录成功') 23 break; 24 else: 25 print('请重新输入') 26 count += 1

1 # str --->byte encode 编码 2 s = '二哥' 3 b = s.encode('utf-8') 4 print(b) 5 #byte --->str decode 解码 6 s1 = b.decode('utf-8') 7 print(s1) 8 9 10 s = 'abf' 11 b = s.encode('utf-8') 12 print(b) 13 #byte --->str decode 解码 14 s1 = b.decode('gbk') 15 print(s1)
文件是不能修改的,如果想要修改文件,只能将源文件读入到python内存中,然后进行修改,然后写入到一个新的备份文件中,然后删除源文件,然后将备份文件重命名为源文件的名字

1 # 文件是不能修改的,所以想要修改文件时,需要在内存中修改后写入到另一个备份文件中,然后将源文件删除,然后将备份文件重命名为之前的名字 2 with open('小护士班主任', encoding='utf-8') as f, open('小护士班主任.bak', 'w', encoding='utf-8') as f2: 3 for line in f: 4 if '星儿' in line: 5 line = line.replace('星儿', '海角') 6 f2.write(line) 7 8 # 删除文件 和 重命名文件 9 import os 10 os.remove('小护士班主任') 11 os.rename('小护士班主任.bak', '小护士班主任')