创建目录
1、os.makedirs 可以递归的创建目录结构
例如:
import os
os.makedirs('路径(可以是相对路径也可以是绝对路径)',exist_ok=True)
exist_ok=True 指定了,如果某个要创建的目录已经存在,也不报错
2、mkdir()函数用于在当前目录下创建目录
例如:
import os
os.mkdir('目录名')
删除目录
1、rmdir()函数用于删除目录
例如:
import os
os.rmdir('test')
2、shutil.rmtree() 可以递归的删除某个目录所有的子目录和子文件
import shutil
shutil.rmtree('tmp', ignore_errors=True)
注意:参数 ignore_errors=True 保证如果目录不为空,不会抛出异常。
删除文件
os.remove 可以删除一个文件
import os
os.remove('sdf.py')
打开文件
在Python中可通过内置函数open()打开文件,该函数的语法格式如下:
open(file, mode='r', encoding=None)
file用于接收文件名或文件路径;
encoding用于指定文件的编码格式,常见的编码格式有ascii、utf-8等;
参数mode用于设置文件的打开模式,常用的打开模式有r、w、a。
- r:以只读的方式打开文件,参数mode的默认值。
- w:以只写的方式打开文件。
- a:以追加的方式打开文
以上模式可以单独使用,也可以与模式b、模式+搭配使用。其中,模式b表示以二进制方式打开文件,模式+表示以更新的方式打开文件。常用的文件打开模式及其搭配如下:
若open()函数调用成功,返回一个文件对象,示例如下:
file1 = open('E:\\a.txt') # 以只读方式打开E盘的文本文件a.txt
file2 = open('b.txt', 'w') # 以只写方式打开当前目录的文本文件b.txt
file3 = open('c.txt', 'w+') # 以读/写方式打开当前目录的文本文件c.txt
file4 = open('d.txt', 'wb+') # 以读/写方式打开当前目录的二进制文件d.txt
以只读模式打开文件时,若待打开的文件不存在,文件打开失败,程序会抛出异常。假设以上代码打开的文件a.txt不存在,具体异常信息如下:
Traceback (most recent call last):
File "E:\python_study\first_proj\test.py", line 1, in <module>
file1 = open('E:\\a.txt')
FileNotFoundError: [Errno 2] No such file or directory: 'E:\\a.txt'
关闭文件
在Python中可通过close()方法关闭文件,也可以使用with语句实现文件的自动关闭。
(1)close()方法
file.close()
(2)with语句
当打开与关闭之间的操作较多时,很容易遗漏文件关闭操作,为此Python引入with语句预定义清理操作、实现文件的自动关闭。
with open('a.txt') as f:
pass # 一些操作
以上示例中as后的变量f用于接收with语句打开的文件对象。程序中无须再调用close()方法关闭文件,文件对象使用完毕后,with语句会自动关闭文件。
为什么要及时关闭文件?
虽然程序执行完毕后,系统会自动关闭由该程序打开的文件,但计算机中可打开的文件数量是有限的,每打开一个文件,可打开文件数量就减1;打开的文件占用系统资源,若打开的文件过多,会降低系统性能;当文件以缓冲方式打开时,磁盘文件与内存间的读写并非即时的,若程序因异常关闭,可能产生数据丢失。因此,在编写代码时应在程序中主动关闭不再使用的文件。
读取文件
(1)read()方法
read()方法可以从指定文件中读取指定字节的数据,其语法格式如下:
read(n=-1)
以上格式中的参数n用于设置读取数据的字节数,若未提供或设置为-1,则一次读取并返回文件中的所有数据。
使用示例:
with open('file.txt', mode='r') as f:
print(f.read(2)) # 读取2个字节的数据
print(f.read()) # 读取剩余的全部数据
假设file.txt文件中的内容如下:
运行代码,结果如下所示:
(2)readline()方法
readline()方法可以从指定文件中读取一行数据,其语法格式如下:
readline()
(3)readlines()方法
readlines()方法可以一次性读取文件中的所有数据,若读取成功返回一个列表,文件中的每一行对应列表中的一个元素。readlines()方法的语法格式如下:
readlines(hint=-1)
以上格式中,参数hint的单位为字节,它用于控制要读取的行数,如果行中数据的总大小超出了hint字节,readlines()不会读取更多的行。
ps:以上介绍的3个方法中,read()(参数缺省时)和readlines()方法都可一次读取文件中的全部数据,但因为计算机的内存是有限的,若文件较大,read()和readlines()的一次读取便会耗尽系统内存,所以这2种操作都不够安全。为了保证读取安全,通常多次调用read()方法,每次读取n字节的数据。
写文件
(1)write()方法
write()方法可以将指定字符串写入文件,其语法格式如下:
write(data)
以上格式中的参数data表示要写入文件的数据,若数据写入成功,write()方法会返回本次写入文件的数据的字节数。
(2)writelines()方法
writelines()方法用于将行列表写入文件,其语法格式如下:
writelines(lines)
以上格式中的参数lines表示要写入文件中的数据,该参数可以是一个字符串或字符串列表。需要说明的是,若写入文件的数据在文件中需要换行,应显式指定换行符。
使用writelines()方法向文件write_file.txt中写入数据,示例代码如下:
string = "Here we are all, by day;\nby night we're hurl'd By dreams, " \
"each one into a several world."
with open('write_file.txt', mode='w', encoding='utf-8') as f:
f.writelines(string)
运行代码,若没有输出信息,说明字符串被成功地写入文件。
ps: 字符与编码
文本文件支持多种编码方式,不同编码方式下字符与字节的对应关系不同,常见的编码方式以及字符与字节的对应关系如下表所示。