python持久化存储文件操作
一、 文件操作介紹
日常中的數(shù)據(jù)存儲(chǔ)在紙上, 而計(jì)算機(jī)的數(shù)據(jù)存儲(chǔ)在哪里呢? —硬盤上
1. 文件的作用
一個(gè)程序在運(yùn)行過(guò)程中用了九牛二虎之力終于計(jì)算出了結(jié)果,試想一下如果不把這些數(shù)據(jù)存放起來(lái),相比重啟電腦之后,“哭都沒地方哭了”。 默認(rèn)數(shù)據(jù)是加載到內(nèi)存中,結(jié)果也是保存到內(nèi)存中, 程序執(zhí)行結(jié)束,所有的數(shù)據(jù)釋放。
2.文件的打開讀寫關(guān)閉
文件的打開模式
要讀取二進(jìn)制文件,比如圖片、視頻等等,用’rb’, ‘wb’, 'ab’等模式打開文件即可
文件最初內(nèi)容:
代碼運(yùn)行結(jié)果:
3.File對(duì)象的屬性:
4.File對(duì)象的常用方法
5. 指針定位
seek(offset, from)有2個(gè)參數(shù): offset:偏移量 from:方向
0:表示文件開頭;
1:表示當(dāng)前位置;
2:表示文件末尾
1). 把位置設(shè)置為:從文件開頭,偏移5個(gè)字節(jié)
2). 把位置設(shè)置為:文件最開始
3). 把位置設(shè)置為:文件最末尾
6.文件的關(guān)閉
方法一: 調(diào)用close()方法關(guān)閉文件。文件使用完畢后必須關(guān)閉,因?yàn)槲募?duì)象會(huì)占用操作系統(tǒng)的資源,
并且操作系統(tǒng)同一時(shí)間能打開的文件數(shù)量也是有限的:
方法二: Python引入了with語(yǔ)句來(lái)自動(dòng)幫我們調(diào)用close()方法
""" with 語(yǔ)句 """ with open('doc/test.txt','w+') as f: #打開一個(gè)文件,如果不存在的話創(chuàng)建w+ 保存為ff.write('hello world\n') #寫入文件f.seek(0,0) #移動(dòng)指針位置到文件最開始#f.seek(0,2) #移動(dòng)指針位置到文件末尾print("當(dāng)前指針位置為:",f.tell())print(f.read()) #讀取文件內(nèi)容代碼運(yùn)行結(jié)果:
二、os模塊
os,語(yǔ)義為操作系統(tǒng),處理操作系統(tǒng)相關(guān)的功能,可跨平臺(tái)。 比如顯示當(dāng)前目錄下所有文件/刪除某個(gè)文件/獲取文件大小……
1.關(guān)于操作系統(tǒng)
import os import platform # 1.獲取操作系統(tǒng)類型 print(os.name) # 2.獲取主機(jī)信息,windows系統(tǒng)使用platform模塊,如果是linux系統(tǒng)直接使用os模塊 """ try: 可能出現(xiàn)報(bào)錯(cuò)的代碼 excpt:可能出現(xiàn)異常,執(zhí)行的內(nèi)容 finally:是否有異常,都會(huì)執(zhí)行的內(nèi)容 """ try:uname = os.uname() except Exception:uname = platform.uname() finally:print(uname) # 3.獲取系統(tǒng)的環(huán)境變量 envs = os.environ # os.environ.get('PASSWORD') 通過(guò)key值獲取環(huán)境變量對(duì)應(yīng)的value值 print(envs)代碼運(yùn)行結(jié)果:
2.關(guān)于路徑
# 1.判斷是否為絕對(duì)路徑 print(os.path.isabs('D:/python/運(yùn)維項(xiàng)目/doc/test.txt')) print(os.path.isabs('test.txt')) # 2.生成絕對(duì)路徑 print(os.path.abspath('D:/python/運(yùn)維項(xiàng)目/doc/test.txt')) print(os.path.abspath('test.txt')) # 3.目錄名和文件名的拼接 #os.path.dirname獲取某個(gè)文件對(duì)應(yīng)的目錄名 #__file__是指當(dāng)前文件 #join 拼接,將目錄和文件名拼接起來(lái) BASE_DIR = os.path.dirname(__file__) setting_file = os.path.join(BASE_DIR,'dev.conf') print(setting_file) # 4.獲取目錄名或者文件名 filename = 'D:/python/運(yùn)維項(xiàng)目/doc/test.txt' print(os.path.basename(filename)) print(os.path.dirname(filename))代碼運(yùn)行結(jié)果:
3.關(guān)于文件創(chuàng)建和刪除
os模塊中的rename()可以完成對(duì)文件的重命名操作。
rename(需要修改的文件名, 新的文件名)
os模塊中的remove()可以完成對(duì)文件的刪除操作
remove(待刪除的文件名)
三、json模塊詳解
JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于ECMAScript的一個(gè)子集。
JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類似于C語(yǔ)言家族的習(xí)慣(包括C、C++、Java、JavaScript、Perl、Python等)。
這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。易于人閱讀和編寫,同時(shí)也易于機(jī)器解析和生成(一般用于提升網(wǎng)絡(luò)傳輸速率)。
python類型數(shù)據(jù)和JSON數(shù)據(jù)格式互相轉(zhuǎn)換規(guī)則
python 中str類型到JSON中轉(zhuǎn)為unicode類型,None轉(zhuǎn)為null,dict對(duì)應(yīng)object;
pyhton中的集合不能轉(zhuǎn)成json格式。
1.將python對(duì)象編碼成json字符串
import json # 1.將python對(duì)象編碼成json字符串 users = {'name':'sun','age':18,'city':'西安'} json_str = json.dumps(users) with open('doc/test.json','w') as f:json.dump(users, f , ensure_ascii=False,indent=4)print('存儲(chǔ)成功') print(json_str,type(json_str))代碼運(yùn)行結(jié)果:
2.將json字符串解碼成python對(duì)象
with open('doc/test.json') as f:python_obj = json.load(f)print(python_obj,type(python_obj))代碼運(yùn)行結(jié)果:
四、pandas模塊
1.打開交互式terminal安裝模塊
pip install pandas -i https://pypi.douban.com/simple2.安裝對(duì)excel文件操作所需要的模塊
>pip install openpyxl -i https://pypi.douban.com/simple3.轉(zhuǎn)換代碼:
import pandashosts = [{'host':'1.1.1.1', 'hostname':'server1', 'idc':'ali'},{'host':'1.1.1.2', 'hostname':'server2', 'idc':'huawei'},{'host':'1.1.1.3', 'hostname':'server3', 'idc':'tengxun'},{'host':'1.1.1.4', 'hostname':'server4', 'idc':'wangyi'}, ] #轉(zhuǎn)換數(shù)據(jù)類型 df = pandas.DataFrame(hosts) print(df) #存儲(chǔ)到excle文件中 df.to_excel('doc/hosts.xlsx')代碼運(yùn)行結(jié)果:
生成的excel文件
五、詞頻統(tǒng)計(jì)練習(xí)題
""" 技能需求:1. 文件操作2. 字符串的分割操作3. 字典操作 功能需求:詞頻統(tǒng)計(jì)1. 讀取song.txt文件 with open(filename) as f: content=f.read()2. 分析文件中的每一個(gè)單詞,統(tǒng)計(jì)每個(gè)單詞出現(xiàn)的次數(shù)。{"hello":2, "python":1, "java":1}- 分析文件中的每一個(gè)單詞content = "hello python hello java"words = content.split()- 統(tǒng)計(jì)每個(gè)單詞出現(xiàn)的次數(shù)- {"hello":2, "python":1, "java":1}# words = ['hello', 'python', 'hello', 'java']""" with open('doc/song.txt') as f: content=f.read() words = content.split() result = {} for i in words:if i not in result:result[i] =1else:result[i] +=1 import pprint pprint.pprint(result) # 統(tǒng)計(jì)出現(xiàn)次數(shù)最高的五個(gè)單詞 from collections import Counter counter = Counter(i) result = counter.most_common(5) print(result)總結(jié)
以上是生活随笔為你收集整理的python持久化存储文件操作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python的字典与集合
- 下一篇: python模块与包