一、文件的打開
1.普通文件:數(shù)據(jù)持久化的最簡單類型,僅僅在一個文件名下的字節(jié)流(流的意思是按照順序一個字節(jié)以個字節(jié)訪問),把數(shù)據(jù)從文件讀入內(nèi)存,從內(nèi)存寫入文件
1.1 open()函數(shù):基本語法如下圖:
f = open(filename[,mode[,buffering]])#帶有三個參數(shù)第一個是文件名,第二個mode意思是訪問模式對指定的文件要進行說明操作的意思,第三個參數(shù)是緩沖一般默認缺省為-1就可以了
f:open()返回文件對象
filename:文件的字符串名
mode:可選參數(shù),打開模式和文件類型
mode參數(shù)第一個字母表明對其的操作如下圖:
r:表示讀模式 #表示從文件中把數(shù)據(jù)讀出來
w:表示寫模式 #把內(nèi)存當中的一些數(shù)據(jù)寫到外層的文件當中
x:表示在文件不存在的情況下新創(chuàng)建并寫文件
a:表示在文件末尾追加寫內(nèi)容
+:表示讀寫模式,可以在讀寫之間來回切換
mode參數(shù)第二個字母表明對其的操作如下圖:
t:表示文本類型
b:表示二進制文件
二、文件的讀寫和訪問
1.文件的寫操作如下圖:
f.write(str) #寫一個字符串到文件中
f.writelines(strlist) #寫入字符串列表
2.文件的讀操作如下圖:
f.read() #如果不加任何參數(shù)它會把整個文件的所有內(nèi)容都讀到內(nèi)存中
f.readline():返回一行(一行讀完以后文件位置的指針會自動跳到下一行,如下次再調(diào)用readline就會把下一行讀出來,一直讀到文件結(jié)束)
f.readlines():返回所有行列并且把它放在列表當中去,列表當中的每一個元素就是一行
對文件的操作舉個例子如下圖:
>>> f = open('my.txt','w') #以w的形式把my.txt文件打開
>>> f.writelines(['apple\n','pie\n']) #在文件中寫入兩行字符串,python的writelines并不自動添加換行,所有需要在每行后面加一個換行符
>>> f.close() #關(guān)閉文件
>>> f=open('my.txt','r') #以r的形式把my.txt文件打開
>>> f.readlines() #把所以的行列讀入內(nèi)存中
['apple\n', 'pie\n'] #以列表的形式返回包括換行符也被保存下了,列表中的每一個元素都是一行,
>>> f.close()#關(guān)閉文件
三、文件的關(guān)閉
1.打開文件要記得關(guān)閉,關(guān)閉的作用是終止對外部文件的連接,同時將緩存區(qū)的數(shù)據(jù)刷新到硬盤上
2.文件的關(guān)閉直接調(diào)用(f.close)就可以了
3.使用上下文管理器(context manager),確保在退出后自動關(guān)閉文件如下圖所示:
with open('textfile','rt') as myfile: #使用上下文管理器這里需要用with這個關(guān)鍵字,打開這個文件并對這個文件重新命名為myfile
myfile.read()
...
...
...
在myfile后面有一個冒號所以后面的語句都需要縮進,而這些在with下面的語句不管對它做什么樣的操作,最后它都會自動關(guān)閉文件
四、結(jié)構(gòu)化文本文件:(csv)
1.c表示逗號的意思s表示分隔符v表示值的意思,即csv文件是以純文本文件的形式出現(xiàn)的以逗號分隔的文本文件。這里有幾點注意如下圖:
csv文件值沒有類型,所有值都是字符串
不能指定字體顏色等樣式
不能指定單元格的寬高,不能合并單元格
沒有多個工作表
不能嵌入圖像圖表
2.對csv文件的基本操作語法如下圖:
圖1、讀的操作reader、DictReader,這里的DictReader是對帶有表頭文件的讀取
import csv #首先調(diào)用csv這個模塊
re = csv.reader() #reader可以接受一個可迭代對象(比如csv文件),能返回一個生成器,可以從中解析出內(nèi)容。
import csv
re = csv.DictReader()
#使用方式與reader類似,也是有一個生成器可以逐行去訪問,但返回的每一個單元格都放在一個元組的值內(nèi)
圖2、寫的操作
import csv
w = csv.writer() #當文件不存在時,自動生成,支持單行寫入和多行寫入
w.witerow(rows)
w = csv.Dictwriter() #以字典數(shù)據(jù)寫入
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')) #寫入內(nèi)容
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: #讀取文件內(nèi)容
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
五、結(jié)構(gòu)化文本文件:Excel
1.openpyxl模塊:該模塊可以用來讀寫擴展名為xlsx/xlsm/xltx/xltm的文件
workbook類是對工作簿的抽象
worksheet類是對表格的抽象
cell類是對單元格的抽象文件寫操作
2.操作之前先導入第三方庫
安裝:pip install openpyx1
導庫:from openpyxl import workbook
3.創(chuàng)建Excel文件
一個workbook對象代表一個excel文檔,使用該方法創(chuàng)建一個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:返回單元格所在列坐標
六、結(jié)構(gòu)化文本文件:PDF
1.處理pdf文件的庫:pyPDF2
pyPDF2包含了pdfFileReader、pdfFileMerger、pageobject和pdfFileWriter四個主要類,可以對PDF文件進行讀寫、分割、合并、文件轉(zhuǎn)換等多種操作,但是只能從PDF文檔中提取文本并返回為字符串,而無法提取圖像、圖表或其他媒體
2.讀取PDF文件基本語法如下圖:
readFile = open('test.pdf','rb') #用open打開獲得一個文件對象readFile
pdfFileReader = pdfFileReader (readFile)#用pdfFileReader這個類處理這個文件對象再返回給pdfFileReader
3.pdfFileReader類
getNumpages():計算PDF文件總頁數(shù)
getpage(index):檢索指定編號的頁面
4.PDF文件的寫操作基本語法如下圖:
writeFile = 'output.pdf'
pdfFileWriter = pdfFileWriter()
5.pdfFileWriter類
.addpage(pageobj):根據(jù)每頁返回的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():訪問頁面內(nèi)容
.rotateClockwise(angle):順時針旋轉(zhuǎn)
.scale(sx,sy):改變頁面大小