在这里插入代码片
@[toc]
1、encoding
- 常见编码
- ASCII:不支持中文,支持英文、数字、符号;使用1个字节
- GBK(国标):支持中文、英文、数字、符号;使用2个字节(英文中文都一样)
- unicode(万国码):支持中文、英文、数字、符号;使用4个字节(英文中文都一样)
- utf-8(长度可变的万国码):支持中文、英文、数字、符号
- 英文(使用1个字节);中文(使用3个字节)
- 编码相关知识
- python3中,程序运行期间,使用的都是unicode,显示所有的内容
- Pycharm中默认为utf-8
- 传输和存储都是使用bytes类型,格式为b’编码后的内容’
encode()
编码函数decode()
解码函数
In [77]: s = 'I am hhh'
In [79]: s.encode()
Out[79]: b'I am hhh'
In [80]: s = b'I am hhh'
In [81]: s.decode()
Out[81]: 'I am hhh'
2、file
(1)文件操作的函数
- 文件是可迭代对象
- 文件的操作是根据光标位置进行的
- 文件分为文本文件和非文本文件
- 文本文件
open([路径], mode="r/w/a", encoding="字符集(编码解码方式)")
打开一个文件- 关于路径:
- 绝对路径,包括本机和互联网的路径(多用于服务器,如log)
- 相对路径,相对于本程序的路径(
../
表示上一级目录./
表示本级目录)
file.read([number])
返回整个文件,number为读取的字符个数file.readline()
返回一行- 文件是可迭代对象,可以用for循环读文件
file.write()
往文件里写入(可用模式为w、a)
- 非文本文件
open([路径], mode="rb/wb/ab")
打开非文本文件,注意操作非文本文件时不要加encoding
- 文本文件
file.close()
关闭文件,打开文件后一定要关闭文件
In [82]: f = open('./test.txt', mode='w', encoding='utf-8')
In [83]: f.write('aaaa\nbbbb\ncccc')
Out[83]: 14
In [84]: f.close()
In [85]: f = open('./test.txt', mode='r', encoding='utf-8')
In [86]: for line in f:
...: print(line) # 这里print语句会自动加一个换行符,所以结果多输出了一个换行符
...:
aaaa
bbbb
cccc
In [87]: f.close()
(2)文件操作的模式
- 模式:
r, w, a, a+, w+, a+, rb, wb, ab, r+b, w+b, a+b
- r:只读(光标默认从文件开头开始)
- w:写操作,会清空原文件,如果原文件不存在会创建新文件
- a:追加,即append
- b:bytes,处理非文本文件
- r+:在读后可以直接进行其它操作(读写同时存在模式)
- 注意:无论读取了多少内容,写入的内容都在末尾
- w+:写读模式
- 注意:写后光标在最末尾,要读取的话需要移动光标
- a+:同w+
- r+b, w+b, a+b:操作非文本文件,类似r+、w+、a+
(3)常用操作
- 光标(seek)
fiel.seek([偏移量], [偏移量参考位置])
- 0表示开始处,1表示当前位置,2表示末尾处
file.seek(0)
移动光标到文件开始处file.seek(0, 2)
移动光标到末尾
file.tell()
返回光标当前位置file.truncate([number])
截断操作,从文件开头截断到number处,默认截断到光标处
(4)文件操作
-
使用下面方式打开文件,可以不用写close
with open(...) as f1 [, open(...) as f2, ...]: pass
- 这样写的话,文件对象就是
f1 f2 ···
- 可以打开多个文件
- 该语法实际上是触发了文件对象的
__enter__()
方法和__exit__()
方法
- 这样写的话,文件对象就是
-
import os
导入os模块os.remove("file_name")
删除文件os.rename("file_name")
重命名文件
-
修改文件:
- 打开文件和文件副本
- 读取文件,写入副本
- 删除原文件,重命名副本