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 # 登录:等待用户输入的用户名和密码,然后和文件中的注册用户名和密码进行比较,匹配则登录成功
View Code

 

 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
View Code
 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)
View Code

 

  文件是不能修改的,如果想要修改文件,只能将源文件读入到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', '小护士班主任')
View Code

 

posted @ 2018-08-26 22:36  _小溢  阅读(864)  评论(0)    收藏  举报