File
- 编码格式介绍
- 文件的读写原理
- 文件的读写操作
- 文件对象常用的方法
- with 语句(上下文管理器)
- 目录操作
编码格式的介绍
常见的字符编码格式
1.python的解释器使用的是Unicode(内存)
2.py文件在磁盘上使用UTF-8存储(外存)
### 为什么要知道编码格式???
在我们操作文本文件的时候,经常会出现中文,这个时候,我们经常会碰到中文乱码的问题,那么怎么去解决这个问题?对于计算机而言,它并不能识别我们的中文,因而在转换时,如果文件中存在中文格式,就容易出现乱码,各种各样的编码格式,对于计算机而言就像时一本本字典,这就好比我们的汉语拼音字典,遇到不会写的字时我们可以使用;英语字典,可以查询不认识的单词的中文意思。同样,对于计算机而言,不同的编码格式,也是不同类型的字典,找到合适的编码格式,将文件进行转换,就不会出现乱码的问题了,所以我们很有必要对一些常见的编码格式进行一定的了解。
文件的读写原理
1.文件的读写俗称“IO操作”
IO分别指 input 和 output ,意思是 输入和输出
2.文件读写操作的流程
读: 针对于内存而言,将数据从外面到达内存中叫做读,read
写:针对于内存而言,将数据从内存送出去叫做写,write
3.操作原理
文件的读写操作
使用内置函数 open() 创建文件对象
被创建的文件对象 = open(要打开或创建的文件名称,打开模式(默认为只读),文件中字符的编写格式(默认文本文件中字符的编写格式为gbk))
例如
读取文件 a.txt中的内容
file = open('a.txt','r')
print(file.readlines())
file.close()
常用的文件打开模式
文件的类型
按文件中数据的组织形式,文件分为以下两类
1.文本文件:存储的时普通“字符”文本,默认为 unicode 字符集,可以使用记事本程序打开
2.二进制文件:把数据内容用“字节”进行存储,无法用记事本打开,必须使用专用的软件打开。举例:MP3音频文件、jpg图片、doc文档等
打开模式 | 描述 |
---|---|
r | 以只读模式打开文件,文件的指针系那个会放在文件的开头 |
w | 以只写模式打开文件,如果文件不存在则创建,如果存在,则覆盖原有内容,文件指针在文件的开头 |
a | 以追加模式打开文件,如果文件不存在则创建,如果文件存在则在文件末尾追加内容,文件指针在原文末尾 |
b | 以二进制方式打开文件,不能单独使用,需要于共它模式一起使用,rb或wb |
+ | 以读写方式打开文件,不能单独使用,需要与其他模式一起使用,a+ |
文件对象的一些常用方法
1.read(size)
从文件中读取size个字节或字符的内容返回,默认读取文件的所有内容
file = open('a.txt','r')
print(file.read())
2.readline()
从文本文件中读取一行内容
3.readlines()
把文本中的每一行都作为独立的字符串对象,并将这些对象放入列表返回
4.write(str)
将字符串str写入文件
file = open('a.txt','a')
file.write('hello')
file.close()
5.writelines(s_list)
将字符串列表s_list写入文本文件,不添加换行符
file = open('a.txt','a')
list = ['java','python']
file.writelines(list)
file.close()
6.seek(offset,whence)
把文件的指针移到新的位置,offset不是相对于whence的位置:
offset: 为正往结束的分享移动,为负往开始方向移动
whence:不同的值代表不同的含义
0:从文件头开始计算(默认值)
1:从当前位置开始计算
2:从文件末尾开始计算
file = open('a.txt','r')
file.seek(2)
print(file.read())
file.close()
7.tell()
返回文件指针的当前位置(位置从0开始计算)
8.flush()
把缓冲区的内容写入文件,但是不过比文件
9.close()
把缓冲区的内容写入文件,同时关闭文件,释放文件对象的相关资源
with语句(上下文管理器)
with语句可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正确的关闭,以此来达到释放资源的目的
目录操作
os模块是python内置的与操作系统功能和文件系统相关的模块,该模块中的语句的执行结果通常与操作系统有关,在不同的这种心态上运行,得到的结果可能不一样
os模块与os.path模块用于对目录或文件进行操作
import os
# 打开记事本
os.system('notepad.exe')
# 打开计算器
os.system('calc.exe')
# 直接调用可执行文件
# 例如QQ
os.startfile('C:\\Program Files (x86)\\Tencent\\QQ\\Bin\\qq.exe')
os模块操作目录的相关函数
函数 | 说明 |
---|---|
getcwd() | 返回当前的工作目录 |
listdir(path) | 返回指定路径下的文件和目录信息 |
mkdir(path,mode) | 创建目录 |
makedirs(path1/path2…) | 创建多级目录 |
rmdir(path) | 删除目录 |
removedirs(path1/path2…) | 删除多级目录 |
chdir(path) | 将path设置为当前工作目录 |
os.path模块操作目录相关函数
函数 | 说明 |
---|---|
abspath(path) | 用于获取文件或目录的绝对路径 |
exists(path) | 用于判断文件或目录是否存在 |
join(path,name) | 将目录或者文件名拼接起来 |
split(path) | 分离路径和文件名 |
splitext(path) | 分离文件名 和拓展名 |
basename(path) | 从一个目录中提取文件名 |
dirname(path) | 从一个路径中提取文件路径,不包括文件名 |
isdir(path) | 用于判断是否为路径 |
练习
获取如上的test目录下的所有.py的文件名
import os
path = 'E:\\MyStudy-Notes\\python\\test'
list=os.listdir(path)
for filename in list:
if filename.endswith('.py'):
print(filename)
进阶
import os
import os
path = 'E:\\MyStudy-Notes\\python\\test'
list = os.walk(path)
for dirpath, dirname, filename in list:
for dir in dirname:
os.path.join(dirpath, dir)
for file in filename:
os.path.join(dirpath, file)
if os.path.join(dirpath, file).endswith('.py'):
print(file)