一、文件
计算机的文件,就是以二进制的方式存储在某种长期存储设备(U盘、光盘、硬盘等)上的一段数据
分类 | 说明 |
---|---|
文本文件 | 本质上还是二进制文件 1. 可以用文本编辑器查看 eg: python源程序 |
二进制文件 | 保存的内容不是给人直接阅读的,而是提供给其他软件使用的 1. 不能用文本编辑器查看 eg: 图片、音频、视频 |
二、文本文件的编码格式
文本文件存储的内容是基于字符编码的文件
常见的编码有ASCII编码、UNICODE编码
Python版本 | 默认编码 |
---|---|
3.x | UTF-8 |
2.x | ASCII |
2.1 ASCII编码
计算机中只有256个ASCII字符
- 一个ASCII在内存中占用1个字节的空间(1个字节8位即8个0/1的组合)
2.2 UNICODE编码
2.2.1 UTF-8
UTF-8是UNICODE编码的一种编码形式
- 计算机中使用1-6个字节来表示一个UTF-8字符,涵盖了地球几乎所有地区的文字
- 大多数汉字会使用3个字节表示
2.3 Python中使用中文
Python版本 | 默认编码 |
---|---|
3.x | UTF-8 |
2.x | ASCII |
- Python2.x中
- 单行注释会让解释器默认以utf-8编码来处理python文件,但在python2.x中遍历字符串,仍以字节为单位遍历字符串
- 字符串引号前面u是告诉解释器这是一个utf-8编码的字符串
# coding:utf-8
my_str = u'Hello世界'
print(my_str)
或
# coding=utf-8
my_str = u'Hello世界'
print(my_str)
或
# *-* coding:utf-8 *-*
my_str = u'Hello世界'
print(my_str)
或
# -*- coding: utf-8 -*-
my_str = u'Hello世界'
print(my_str)
三、文件操作
名称 | 描述 |
---|---|
文件 | 文件做的就是持久的保存数据 1. 文件一般保存在磁盘或硬盘中 |
数据 | 内存中的数据只在程序运行时存在 |
文件指针 | 用于标记从哪个位置开始读取数据 1. 首次打开文件时,文件指针指向文件的开始位置 2. read()执行完后,文件指针会移动到读取内容的末尾(默认是文件末尾) |
1. 文件操作的步骤:三个步骤
- 打开文件
- 读或写文件
将文件内容读入到内存中
将内存内容写入文件 - 关闭文件
忘记关闭文件,会造成系统资源消耗,而且会影响到后续对文件的访问
2. 一个函数三个方法:
操作文件的函数方法 | 描述 |
---|---|
open() |
打开文件,并返回文件操作对象 |
read() |
通过文件对象将文件内容读入到内存中 |
write() |
通过文件对象将内存内容写入文件 |
close() |
通过文件对象关闭文件 |
3.1 打开文件与关闭文件
格式:
f = open(file_name, mode='r', encoding='gbk')
...
f.close()
必须记得关闭文件
参数 | 说明 |
---|---|
file_name |
文件名 1. 区分大小写 |
mode |
访问方式 1. 默认 mode='r' 只读模式 |
encoding |
文件编码 1.在中国Windows默认中文编码gbk 2. 默认其他字符编码utf-8 |
mode | 描述 |
---|---|
r |
以只读方式打开文件默认 1. 如果文件存在就将文件指针放到文件开头 2. 如果文件不存在就抛出异常 |
w |
以只写方式打开文件 1. 如果文件存在就覆盖 2. 如果文件不存在就新建新文件 |
a |
以追加方式打开文件 1. 如果文件存在就将文件指针放到文件末尾 2. 如果文件不存在就新建新文件 |
r+ |
以读写方式打开文件 1. 如果文件存在就将文件指针放到文件开头 2. 如果文件不存在就抛出异常 |
w+ |
以读写方式打开文件 1. 如果文件存在就覆盖 2. 如果文件不存在就新建新文件 |
a+ |
以读写方式打开文件 1. 如果文件存在就将文件指针放到文件末尾 2. 如果文件不存在就新建新文件 |
频繁地移动文件指针,会影响文件的读写效率,开发中更多时候会以只读、只写的方式来操作文件
参阅:
3.1.1 只读模式
f = open('tmp.txt', 'r', encoding='utf-8')
open()
——文件存在,直接打开;文件不存在,则报错
读取函数 | 描述 |
---|---|
read() |
一次性读取所有数据并返回字符串 1. 如果文件太大,对内存占用非常严重,这时可以使用循环加 readline() 或readlines()
|
read()line |
一次读取一行数据 1. 方法执行后,会将文件指针移动到下一行,准备再次读取 |
read()lines |
将每行数据作为元素保存到列表中并返回列表 |
提示:
- 读模式下,打开一个文件中重复读取数据时,起始点是上一个结束点的下一个字符或下一行
eg:
- 读取大文件的正确姿势
with open("README", 'w', encoding='utf-8') as f:
f.write("hello\nhello\nhello\n")
with open("README", 'r', encoding='utf-8') as f:
while True:
# 读取一行数据
text = f.readline()
# 判断是否读到内容
if not text:
break
# 每读取一行的末尾都有一个'\n'
print(text, end="")
3.1.2 只写模式
f = open('tmp.txt', 'w', encoding='utf-8')
文件存在,直接打开;文件不存在,则新建文件
直接清空原来的所有内容再写入新的内容(清空+写入)
3.1.3 追加模式
f = open('tmp.txt', 'a', encoding='utf-8')
文件存在,直接打开;文件不存在,则新建文件
将写入的内容追加到原来内容的后面(追加)
3.1.4 示例
eg:
with open('tmp.txt', 'w', encoding='utf-8') as f:
f.write("haha")
f.write("\nhha")
with open('tmp.txt', 'r', encoding='utf-8') as f:
res1 = f.read()
# readlines()把每行的数据保存到列表中并返回列表
with open('tmp.txt', 'r', encoding='utf-8') as f:
res2 = f.readlines()
print(res1)
print(res2)
结果:
3.2 文件/目录常见的管理操作
文件/目录的操作都支持相对路径和绝对路径
import os
文件操作 | 描述 | 格式 |
---|---|---|
rename |
重命名文件 | os.rename(源文件名, 目标文件名) |
remove |
删除文件 | os.remove(源文件名, 目标文件名) |
目录操作 | 描述 | 格式 |
---|---|---|
listdir |
目录列表 | os.listdir(目录名) |
mkdir |
创建目录 | os.mkdir(目录名) |
rmdir |
删除目录 | os.rmdir(目录名) |
getcwd |
获取当前目录 | os.getcwd() |
chdir |
修改工作目录 | os.chdir(目标目录) |
path.isdir |
判断是否为目录 | os.path.istdir(文件路径) |
更新中......