一、文件的打开
1.普通文件:数据持久化的最简单类型,仅仅在一个文件名下的字节流(流的意思是按照顺序一个字节以个字节访问),把数据从文件读入内存,从内存写入文件
1.1 open()函数:基本语法如下图:
f = open(filename[,mode[,buffering]])#带有三个参数第一个是文件名,第二个mode意思是访问模式对指定的文件要进行说明操作的意思,第三个参数是缓冲一般默认缺省为-1就可以了
f:open()返回文件对象
filename:文件的字符串名
mode:可选参数,打开模式和文件类型
mode参数第一个字母表明对其的操作如下图:
r:表示读模式 #表示从文件中把数据读出来
w:表示写模式 #把内存当中的一些数据写到外层的文件当中
x:表示在文件不存在的情况下新创建并写文件
a:表示在文件末尾追加写内容
+:表示读写模式,可以在读写之间来回切换
mode参数第二个字母表明对其的操作如下图:
t:表示文本类型
b:表示二进制文件
二、文件的读写和访问
1.文件的写操作如下图:
f.write(str) #写一个字符串到文件中
f.writelines(strlist) #写入字符串列表
2.文件的读操作如下图:
f.read() #如果不加任何参数它会把整个文件的所有内容都读到内存中
f.readline():返回一行(一行读完以后文件位置的指针会自动跳到下一行,如下次再调用readline就会把下一行读出来,一直读到文件结束)
f.readlines():返回所有行列并且把它放在列表当中去,列表当中的每一个元素就是一行
对文件的操作举个例子如下图:
>>> f = open('my.txt','w') #以w的形式把my.txt文件打开
>>> f.writelines(['apple\n','pie\n']) #在文件中写入两行字符串,python的writelines并不自动添加换行,所有需要在每行后面加一个换行符
>>> f.close() #关闭文件
>>> f=open('my.txt','r') #以r的形式把my.txt文件打开
>>> f.readlines() #把所以的行列读入内存中
['apple\n', 'pie\n'] #以列表的形式返回包括换行符也被保存下了,列表中的每一个元素都是一行,
>>> f.close()#关闭文件
三、文件的关闭
1.打开文件要记得关闭,关闭的作用是终止对外部文件的连接,同时将缓存区的数据刷新到硬盘上
2.文件的关闭直接调用(f.close)就可以了
3.使用上下文管理器(context manager),确保在退出后自动关闭文件如下图所示:
with open('textfile','rt') as myfile: #使用上下文管理器这里需要用with这个关键字,打开这个文件并对这个文件重新命名为myfile
myfile.read()
...
...
...
在myfile后面有一个冒号所以后面的语句都需要缩进,而这些在with下面的语句不管对它做什么样的操作,最后它都会自动关闭文件
四、结构化文本文件:(csv)
1.c表示逗号的意思s表示分隔符v表示值的意思,即csv文件是以纯文本文件的形式出现的以逗号分隔的文本文件。这里有几点注意如下图:
csv文件值没有类型,所有值都是字符串
不能指定字体颜色等样式
不能指定单元格的宽高,不能合并单元格
没有多个工作表
不能嵌入图像图表
2.对csv文件的基本操作语法如下图:
图1、读的操作reader、DictReader,这里的DictReader是对带有表头文件的读取
import csv #首先调用csv这个模块
re = csv.reader() #reader可以接受一个可迭代对象(比如csv文件),能返回一个生成器,可以从中解析出内容。
import csv
re = csv.DictReader()
#使用方式与reader类似,也是有一个生成器可以逐行去访问,但返回的每一个单元格都放在一个元组的值内
图2、写的操作
import csv
w = csv.writer() #当文件不存在时,自动生成,支持单行写入和多行写入
w.witerow(rows)
w = csv.Dictwriter() #以字典数据写入
w.writeheader()
w.writerow(rows)
图3、实例如下图
import csv
with open('test1.csv','w',newline='') as f: #以写的方式打开test1.csv文件并重命名为f,newline='是为了去空格
w = csv.writer(f)
w.writerow(('name', 'tel', 'address', 'age')) #写入内容
w.writerow(('zhang', 15111111111, 'beijing', 33))
w.writerow(('li', 13822222222, 'wuhan', 28))
w.writerow(('liu', 15933333333, 'hainan', 25))
w.writerow(('rows',1110))
with open('test1.csv','r',newline='') as f: #以读的方式打开文件
reader = csv.reader(f)
for i in reader: #读取文件内容
print(i)
输出
F:\j\venv\Scripts\python.exe F:/j/demo22.py
['name', 'tel', 'address', 'age']
['zhang', '15111111111', 'beijing', '33']
['li', '13822222222', 'wuhan', '28']
['liu', '15933333333', 'hainan', '25']
['rows', '1110']
Process finished with exit code 0
五、结构化文本文件:Excel
1.openpyxl模块:该模块可以用来读写扩展名为xlsx/xlsm/xltx/xltm的文件
workbook类是对工作簿的抽象
worksheet类是对表格的抽象
cell类是对单元格的抽象文件写操作
2.操作之前先导入第三方库
安装:pip install openpyx1
导库:from openpyxl import workbook
3.创建Excel文件
一个workbook对象代表一个excel文档,使用该方法创建一个worksheet对象后才能打开一个表,基本语法如下图:
form openpyxl import workbook
wb = workbook()
ws = wb.active
4.读取excel文件基本语法如下图:
from openpyxl import load_workbook
wb = load_workbook(filename)
ws = wb.file.active
5.获取单元格的信息基本语法如下图:
1.获取Cell对象
c = wb['sheet'] ['A1']
c = wb['sheet'].cell(row=1,column=1)
#获取Cell对象之后可以获取坐标和单元格的值
c.coordinate:返回单元格坐标
c.value:返回单元格的值
c.column:返回单元格所在列坐标
六、结构化文本文件:PDF
1.处理pdf文件的库:pyPDF2
pyPDF2包含了pdfFileReader、pdfFileMerger、pageobject和pdfFileWriter四个主要类,可以对PDF文件进行读写、分割、合并、文件转换等多种操作,但是只能从PDF文档中提取文本并返回为字符串,而无法提取图像、图表或其他媒体
2.读取PDF文件基本语法如下图:
readFile = open('test.pdf','rb') #用open打开获得一个文件对象readFile
pdfFileReader = pdfFileReader (readFile)#用pdfFileReader这个类处理这个文件对象再返回给pdfFileReader
3.pdfFileReader类
getNumpages():计算PDF文件总页数
getpage(index):检索指定编号的页面
4.PDF文件的写操作基本语法如下图:
writeFile = 'output.pdf'
pdfFileWriter = pdfFileWriter()
5.pdfFileWriter类
.addpage(pageobj):根据每页返回的pageobject,写入到文件
6.合并多个文档基本语法如下图:
pdf_merger = pdfFileMerger()
pdf_merger.append('py2018.pdf')
pdf_merger.merge(10,'insert.pdf')
pdf_merger.write('merge.pdf')
7.单个页面操作:pageobject类
.extractText():按照顺序提取文本
.getContents():访问页面内容
.rotateClockwise(angle):顺时针旋转
.scale(sx,sy):改变页面大小
网友评论