- 学习目录
- 文件操作步骤
- 读文件
- 写文件
- 文件模式
- 文件方法
- open方法
- with方法
- for结合相关方法操作
- 字符编码
0x01 文件操作步骤
- 打开文件
- 写入文件内容
- 关闭文件
- Example: 打开文件步骤
# 打开文件(首先,文件需要存在)
f = open("file.txt", 'w').read()
# 写入文件
f.write('Hello Python')
# 关闭文件
f.close()
- Example: 追加文件
# 追加写入文件(在文件尾写入)
f = open("file.txt", "a", encoding="utf-8")
f.write("Hello Python
飞上天去?
我们都不一样
")
f.close()
- Example: 全局申明
ENCODEING = "utf -8"
0x02 文件读操作
- 语法格式
- 格式
file = open('filename', 'mode', encoding)
PS:
- filename: 文件名称或全路径文件
- mode: 读取文件模式
- encoding:文件编码格式
- Example: 打开文件
f = open('file.txt', 'r', encoding='utf8') # 确保file.txt文件内有内容
print(f.read())
f.close()
0x03 文件写操作
- 语法格式
- 格式
file.write('string')
- Example: 写文件
f = open('file.txt', 'w', encoding='utf8') # 确保file.txt文件内有内容
f.write('你好?
Hello Python.
')
f.close()
0x04 文件模式
- 常规文件模式
- 读写文件模式
- 二进制文件模式
- 常规文件模式
r # 只读模式(默认模式,文件必须存在,不存在则抛出异常)
w # 只写模式(不可读;不存在则创建;存在则清空内容)
x # 只写模式(不可读;不存在则创建,存在则报错)
a # 追加模式(可读; 不存在则创建;存在则只追加内容)
- 读写文件模式
r+ # 读写
w+ # 写读
x+ # 写读
a+ # 追加读写
PS:
- 均可读,可写
- 二进制文件模式
rb # 读二进制文件
wb # 写二进制文件
xb # 读写二进制文件
ab # 追加二进制文件
0x05 文件方法
- 方法
f.closed() # 判断文件关闭,打开提示False,关闭提示True
f.flush() # 修改内容,强制刷新到文件中
f.isatty # 判断是否为终端文件
f.mode # 查看文件的打开模式
f.name # 文件名称
f.next # 迭代方法。与readline像,区别,next读到末尾会报错,readline会继续返回null
f.read # 读取文件内容,以字符串形式输出
f.readable() # 判断文件是否可读
f.readline() # 每次读取一行内容
f.readlines() # 读取所有内容,以列表方式存取(适合操作小文件)
f.seek(0) # 调整读取文件指针位置
f.seekable() # 判断文件可以调整指针位置(tty,磁盘等文件是不能被seek的),可以返回True,否则返回False --> Py3
f.tell() # 查询文件当前读取位置(以字符为单位)
f.truncate() # 截取文件,从头开始截取,不指定指针位置,会清空文件
f.write() # 把内容写入至文件中
f.writelines() # 把字符串列表写入文件中
f.xreadlines() # 读一行打印一行,针对大文件非常适用 -----> Py2适用,Py3取消
f.encoding() # 查看文件编码
f.writeable() # 判断文件是否可以写
f.fileno() # 返回文件在操作系统的文件描述符(默认会为:0 --> stdin、1 --> stdout,2 --> stderr)
0x06 open()方法
- 用法
- 语法
- 用法
* 打开文件,创建文件对象,与相关方法结合进行读写操作
- 语法
file object = open(file_name [, access_mode][, buffering])
PS:
- file_name # 文件名称
- access_mode # 文件模式,默认为:r
- buffering # 寄存区的缓冲大小。 0不会寄存,1访问文件时会寄存行
- Example: 打印诗歌
f = open('file.txt', 'r', encoding='utf8').read() # 确保file.txt文件存在却包含内容
print(f)
0x07 with方法
- 特点
- 语法
- 特点
* 节省每次都需要f.close(),文件用完后自动关闭
- 语法
# 单个文件
with open('file_name','access_mode') as obj1:
pass
# 多个文件
with open('file_name','access_mode') as obj1, with open('file_name','access_mode') as obj2:
pass
0x08 for结合相关方法操作文件
- with结合for循环打印单个文件
- with结合for循环打印多个文件
- Example: with结合for循环打印单个文件
with open('file.txt', 'r', encoding='utf-8') as f:
for i in f:
print(i)
- Example: 双层循环打印多个文件
with open('file.txt', 'r', encoding='utf-8') as f1,
open('files', 'r', encoding='utf-8') as f2:
for x in f1:
for y in f2:
print(y)
print(x)
- Example: with()结合codecs模块使用
import codecs
# 写入操作
with codecs.open("file.txt", 'w') as f:
f.write("Hello World
大家好,才是真的好
")
# 读取操作
with codecs.open("file.txt", 'r', encoding="utf-8") as f:
print(f.read)
0x09 字符编码
- 什么是编码?
- 常见编码?
- 特点
- 什么是编码?
* 从明文到编码文本的转换称为"编码",从编码文本又转回成明文则为"解码"
- 常见编码?
* ASCII
* GBK
* Unicode
* utf-8
- 特点
* py2默认ASCII
* py3默认utf-8
* unicode分:
---> utf-32(占4个字节)
---> utf-16(占两个字节)
---> utf-8(占1-4个字节)utf-8即unicode编码
* 在py3内:
---> encode转码的同时会把string变成bytes类型
---> decode解码的同时会把bytes变回string
0x10 示例整理
- 打印单个文件内容
- with结合for打印单个文件
- 修改文件内容,replace()方法
- Example: readline()一次读取一行
f = open('file.txt', 'r', encoding='utf-8')
print(f.readline())
print(f.readline())
print(f.readline())
- Example: readlines()读取一个文件列表(迭代方式)
f = open('file.txt', 'r', encoding='utf-8')
print(f.readlines())
- Example: readlines()结合for使用
f = open('file.txt', 'r', encoding='utf-8')
for i in f.readlines():
print(i)
- Example: 结合enumerate()打印行号
f = open('file.txt', 'r', encoding='utf-8')
for i, j in enumerate(f.readlines()):
print("第 {0} 行内容为: {1}".format(i, j))
- Example: 打印单个文件内容
f1 = open("file.txt", "r", encoding="utf-8")
for line in f1:
print(line)
- Example: with结合for打印单个文件
with open("file.txt", "r", encoding="utf-8") as f1:
for line in f1:
print(line)
- Example: 修改文件内容replace()
f1 = open("file.txt", "r", encoding="utf-8")
f2 = open("files", "w", encoding="utf-8")
name1 = 'Robin'
name2 = 'Robin.Chow'
for i in f1:
if name1 in i:
i = i.replace(name1, name2)
f2.write(i)
f1.close()
f2.close()