文件读写
一、创建目录
python可以使用mkdir()和makedirs()两种方法来创建目录,mkdir()创建一层目录,makedirs()创建多层目录。
1.创建一层目录mkdir()
实例:
import os
# 创建目录‘D:\\Python创建的文件夹’
os.mkdir(r'D:\\Python创建的文件夹')
2.创建多层目录makedirs()
import os
# 创建多多层目录‘D:\\Test\\AA’
os.makedirs(r'D:\\Test\\AA')
3.实例
import os
def mkdir(path):
# 判断目录是否存在
# 获取目录
folder = os.path.exists(path)
if not folder:
os.mkdir(path)
# os.makedirs(path)
print('----创建成功----')
else:
print(path + '目录已存在')
path = r'D:\\Test'
# path = r'D:\\Test\\AA'
mkdir(path)
结果:
D:\自学python\python基础\python基础\venv\Scripts\python.exe D:/自学python/python基础/python基础/文件读写/创建目录.py
----创建成功----
4.删除目录
一般删除文件时使用os库,然后利用os.remove(path)即可完成删除,如果删除空文件夹则可使用os.removedirs(path)即可,
但是如果需要删除整个文件夹,且文件夹非空时使用os.removedirs(path)就会报错了,此时可以使用shutil库,该库为python内置库,是一个对文件及文件夹高级操作的库,可以与os库互补完成一些操作,如文件夹的整体复制,移动文件夹,对文件重命名等。
import os
import shutil
os.remove(path) #删除文件
os.removedirs(path) #删除空文件夹
os.rmdir(path) #删除空文件夹
shutil.rmtree(path) #递归删除文件夹,即:删除非空文件夹
二、文件操作file
1.open() 方法
Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。
注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。
open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。
open(file, mode='r')
完整的语法格式为:
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
参数说明:
file: 必需,文件路径(相对或者绝对路径)。mode: 可选,文件打开模式
buffering: 设置缓冲
encoding: 一般使用utf8
errors: 报错级别
newline: 区分换行符
closefd: 传入的file参数类型
opener: 设置自定义开启器,开启器的返回值必须是一个打开的文件描述符。
mode 参数有:
模式 | 描述 |
---|---|
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
2.文件操作
file 对象使用 open 函数来创建,下表列出了 file 对象常用的函数:
方法 | 描述 |
---|---|
file.close() | 关闭文件。关闭后文件不能再进行读写操作。 |
file.flush() | 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。 |
file.fileno() | 返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。 |
file.isatty() | 如果文件连接到一个终端设备返回 True,否则返回 False。 |
file.read([size]) | 从文件读取指定的字节数,如果未给定或为负则读取所有。 |
file.readline([size]) | 读取整行,包括 “\n” 字符。 |
file.readlines([sizeint]) | 读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。 |
file.seek(offset[, whence]) | 移动文件读取指针到指定位置 |
file.tell() | 返回文件当前位置。 |
file.truncate([size]) | 从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 windows 系统下的换行代表2个字符大小 |
file.write(str) | 将字符串写入文件,返回的是写入的字符长度。 |
file.writelines(sequence) | 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。 |
实例代码
1.在指定的目录创建txt文件
import os
def mkdir_file(filename):
# 创建文件
os.chdir(r'D:\\Test') # 进入指定目录
if not os.path.isfile(filename):
fd = open(filename, mode='w', encoding='utf-8') # 创建文件
fd.close()
file_name = 'test.txt'
mkdir_file(file_name)
运行结果:
2.在.txt文件中写入数据
import os
# 使用open()函数和write()函数
# 但是有两种写法,分别是'a'和'w'
def write_txt(file_path, txt):
# a:表示写入文件,若无该文件会直接创建一个如果存在这个文件,会接着已有的内容的后面写入
with open(file_path, 'a', encoding='utf-8') as f:
# w:表示写入文件,若无该文件会直接创建一个,如果存在这个文件,里面的内容会被后面写入的内容替换掉
# with open(file_path, 'a', encoding='utf-8') as f:
f.write(txt)
print('写入文件成功')
file_path = r'D:\\Test\\test.txt'
txt = '好好学习,天天向上'
write_txt(file_path, txt)
运行结果:
3.python操作word文件
安装 python-docx 库
在终端中执行
pip install python-docx
from docx import Document
from docx.shared import Cm
def write_word():
file = Document()
# 添加标题
file.add_heading('文章标题', level=1)
# 添加段落
dl1 = file.add_paragraph('这是一个段落')
dl2 = file.add_paragraph('这又是一个段落')
dl3 = file.add_paragraph()
dl3.add_run('加粗').bold = True
dl3.add_run('普通')
dl3.add_run('斜体').italic = True
# 添加图片
file.add_picture(r'F:\图片\abc.jpg', width=Cm(5), height=Cm(3))
table_list = [
['学号', '姓名', '成绩'],
[10120, '吕布', 80],
[10121, '貂蝉', 95],
[10122, '李白', 100]
]
# 添加表格
table = file.add_table(rows=4, cols=3)
for row in range(4):
cells = table.rows[row].cells
for col in range(3):
cells[col].text = str(table_list[row][col])
file.save(r'D:\\Test\\ces.docx')
write_word()
4.python操作excel文件
常见库简介
xlrd
xlrd是一个从Excel文件读取数据和格式化信息的库,支持.xls以及.xlsx文件。
http://xlrd.readthedocs.io/en/latest/
1、xlrd支持.xls,.xlsx文件的读
2、通过设置on_demand变量使open_workbook()函数只加载那些需要的sheet,从而节省时间和内存(该方法对.xlsx文件无效)。
3、xlrd.Book对象有一个unload_sheet方法,它将从内存中卸载工作表,由工作表索引或工作表名称指定(该方法对.xlsx文件无效)
xlwt
xlwt是一个用于将数据和格式化信息写入旧Excel文件的库(如.xls)。
https://xlwt.readthedocs.io/en/latest/
1、xlwt支持.xls文件写。
xlutils
xlutils是一个处理Excel文件的库,依赖于xlrd和xlwt。
http://xlutils.readthedocs.io/en/latest/
1、xlutils支持.xls文件。
2、支持Excel操作。
xlwings
xlwings是一个可以实现从Excel调用Python,也可在python中调用Excel的库。
http://docs.xlwings.org/en/stable/index.html
1、xlwings支持.xls读,支持.xlsx文件读写。
2、支持Excel操作。
3、支持VBA。
4、强大的转换器可以处理大部分数据类型,包括在两个方向上的numpy array和pandas DataFrame。
openpyxl
openpyxl是一个用于读取和编写Excel 2010 xlsx/xlsm/xltx/xltm文件的库。
https://openpyxl.readthedocs.io/en/stable/
1、openpyxl支持.xlsx文件的读写。
2、支持Excel操作。
3、加载大.xlsx文件可以使用read_only模式。
4、写入大.xlsx文件可以使用write_only模式。
xlsxwriter
xlsxwriter是一个用于创建Excel .xlsx文件的库。
https://xlsxwriter.readthedocs.io/
1、xlswriter支持.xlsx文件的写。
2、支持VBA。
3、写入大.xlsx文件时使用内存优化模式。
xlrd
import xlrd
def test_xlrd_on_demand_false():
# f = xlrd.open_workbook('test_cases\\read_xls.xls', on_demand=False)
f = xlrd.open_workbook('test_cases\\read_xlsx.xlsx', on_demand=False)
def test_xlrd_on_demand_true():
# f = xlrd.open_workbook('test_cases\\read_xls.xls', on_demand=True)
f = xlrd.open_workbook('test_cases\\read_xlsx.xlsx', on_demand=True)
f.sheet_by_index(0)
xlwt
import xlwt
book = xlwt.Workbook()
def test_xlwt():
for s in range(5):
sheet = book.add_sheet(str(s))
for i in range(2000):
for j in range(256):
sheet.write(i, j, 65536)
book.save('test_cases\\write_xls.xls')
openpyxl
import openpyxl
def test_openpyxl_read():
f = openpyxl.load_workbook('test_cases\\read_xlsx.xlsx', read_only=True)
c = [65536] * 1200
f = openpyxl.Workbook(write_only=True)
def test_openpyxl_write():
for i in range(1):
sheet = f.create_sheet(title=str(i))
for row in range(2000):
sheet.append(c)
f.save('test_cases\\write_xlsx.xlsx')
xlsxwriter
import xlsxwriter
workbook = xlsxwriter.Workbook('test_cases\\write_xlsx.xlsx')
def test_xlsxwriter():
for s in range(1):
worksheet = workbook.add_worksheet()
for i in range(2000):
for j in range(1200):
worksheet.write(i, j, 65536)
workbook.close()