python文件操作

文件操作使用的函數
open 打開
read 讀
write 寫
close 關
其他非常用的 seek 設置讀取指針 tell 讀取讀取指針位置

windows中
def encode(self, encoding=’utf-8′, errors=’strict’)
open 和它的參數
open(file,mode=’r’,buffering=-1,encoding=None,errors=None,newline=None,closed=True,opener=None)
再mode的’r+’模式中
先讀取 后寫入會從最后面的地方開始寫入
這是因為它的指針stat指在了最后的地方
設置seek 他會寫入覆蓋指針開始的地方,寫玩后指針會在寫完內容的后面的地方
‘w+’模式中
進入文件文件不論事先存在與否都會是一個空的文件,
‘a+’模式中
指針開始的地方就在最后,讀取不到東西,設置指針seek可以讀取到內容
寫入內容后都不能夠再讀取,因為a寫入的內容都是追加的,指針在最后面
‘x+’模式
進入的文件是空的,先寫入后面才可以讀取,
寫模式中它的它從seek指針所在位置開始寫入

總結:讀取文件從指針位置讀取,讀寫文件后在讀或者寫的最后的地方是指針的位置,’a’模式中進入時就在最后寫入時是往最后面追加

 

buffering 緩存模式對于 t文本和b字節有差別
默認 -1 都是默認內存容量
0 b關閉緩存,t無法使用
1 b就是1個字節, t使用到了換行符就緩存
>1 b設置緩沖區大小,t 沒明顯效果在達到默認的緩存大小時依然能緩存
測試:
設置seek,tell時也會導致緩存內容緩存
如果一個文件多個線程訪問時,也會造成內容緩存

在linux中
from pathlib import Path
p = Path()
type(p)
>>pathlib.PosixPath
p
>>posixPath(‘.’)
p.absolute()
>>PosixPath(‘/home/python/magedu/projects/cmdb’)

在Windows中
from pathlib import Path
p = Path()
type(p)
>>pathlib.WindowsPath
p
>>WindowsPath(‘.’)
p.absolute()
>>WindowsPath(‘C:/Users/Administrator’)

 

p = p.joinpath(‘a’,’b’)
p.absolute()
>>PosixPath(‘/home/python/magedu/projects/cmdb/a/b’)
p = p/’c’/’d’ 相當于 p /=’c’/’d’
p
>>PosixPath(‘a/b/c/d’)

p=Path() #當前目錄
p=Path(‘a’,’b’,’c/d’) #當前目錄下面的a/b/c/d目錄
p=Path(‘/etc’) #根下的etc目錄

不論Linux,windows ‘/’不需要轉義 ‘\’需要轉義

p.parent 目錄的一個屬性返回它的父目錄

list(p2.parents) p2目錄更高級的目錄的列表
[PosixPath(‘/etc’),PosixPath(‘/’)]

p = Path() 不同于字符串的專門的對象,它的方法字符串都不能使用

 

os模塊
os.listdir(‘o:/temp’) 返回目錄內容列表
os.stat(path,*,dir_fd=None,follow_symlinks=True) 顯示文件或目錄的標志信息
os.stat_result(st_mode=33206, st_ino=3096224743941554, st_dev=305849394, st_nlink=1, st_uid=0, st_gid=0, st_size=12, st_atime=1508808655, st_mtime=1509154651, st_ctime=1508808655)

os.chmod(path,mode,*,dir_fd=None,follow_symlinks=True)
os.chmod(‘test.txt’,0o777)

os.chown(path,uid,gid)

shutil模塊 復制 刪除 移動
copyfile(src,dst,*,follow_symlinks=True)
copyfileobj(fsrc,fdst[,length])
src和dst 必須是表示路徑的字符串 length指定buffer的大小,必須對src可讀dst可寫
fsrc,fdst 必須是open打開的文件類型
它們的原來的權限設置不會改變
copymode(src,dst,*,follow_symlinks=True) 僅僅復制權限

基本數據類型中列表和字典,bytearray都有.copy()方法
copy(src,dst,*,follow_symlinks=True) 底層調用了copyfile和copymode
copy2(src,dst,*,follow_symlinks=True) 底層調用了copyfile和copystat

copytree(src,dst,symlinks=False,ignore=None,copy_function=copy2,ignore_dangling_symlinks=False)
遞歸復制整個目錄,文件直接拷貝,軟連接默認直接引用,
ignore= func ,提供一個callable(src,names)->ignored_names.names是os.listdir(src)的結果,
# o:/temp下有a,b目錄
def ignore(src,name):
ig = filter(lambda x: x.startswith(‘a’),names) # 忽略a 類型的文件
return set(ig)
shutil.copytree(‘o:/temp’,’O:/tt/o’,ignore=ignore)
– 普通文件
d 目錄文件
b 塊設備文件
c 字符設備文件
l 符號鏈
p 管道特殊文件

rm刪除
shutil.rmtree(path,ignore_errors=False,onerror=None) 遞歸刪除,非原子操作,

move移動
move(src,dst,copy_function=copy2)
遞歸移動文件,目錄到目標,返回目標
底層使用的是os.rename方法

csv 文件,是一種文件類型
生成一個csv類型的文件需要 指定一個.csv的文件路徑
寫入一個有行分隔符和列分隔符的字符串
行分隔符\r\n 列分割符常為逗號

讀取一個csv文件,要引入csv模塊
reader(csvfile,dialect=’excel’,**fmtparams) #返回一個迭代器是DictReader的實例

import csv
p = Path(‘o:/tmp/mycsv/test.csv’)
with open(str(p)) as f:
reader = csv.reader(f)
print(next(reader))
print(next(reader))

 

row = [4,’tom’,22,’tom’]
rows = [
(5,’jerry’,24,’jerry’),
(6,’justin’,22,’just\t”in’)
]
writer(csvfile,dialect=’excel’,**fmtparams) #返回DictWriter的實例

with open(str(p),’a+’) as f:
writer = csv.writer(f)
writer.writerow(row)
writer.writerrows(rows)

4 tom 22 tom
5 jerry 24 jerry
6 justin 22 just ”

 

ini文件 作為配置文件,它很流行
使用configparser配置解析器 這個模塊來對它操作
from configparser import ConfigParser
#讀取一個.ini文件
cfg = ConfigParser()
cfg.read(‘mysql.ini’) #指明路徑
cfg有.sections方法 和.items([section])方法如果知道其中的section名稱可以獲取
section 的鍵值對 ,沒有參數可以返回一個迭代器

 

serialization 序列化
將內存中對象存儲下來,把它變成一個個字節
deserialization 反序列化
字節恢復成內存中對象
每一種高級語言都有自己的序列化的實現

from pathlib import Path
import pickle
寫入
pickle.dump(存儲對象,文件打開對象) #在文件中操作的
pickle.dumps() #在內存中操作

lst = ‘a b c’.split()
d = dict(zip(‘abc’,range(3))
with open(‘o:/bin’,’wb’) as f:
pickle.dump(lst,f)
pickle.dump(d,f)

with open(‘o:/bin’,’rb’) as f:
tmp = pickle.load(f)
print(tmp)
tmp = pickle.load(f)
print(tmp)
輸出結果
[‘a’,’b’,’c’]
{‘a’:0,’b’:1,’c’:2}

class AA()
def show()
…….
aa =AA()
with open(‘o:/bin’,’wb’) as f:
pickle.dump(aa,f) # 對象aa寫入文件

with open(‘o:/bin’,’rb’) as f:
tmp= pickle.load(f)
print(type(tmp)) =>輸出<class ‘test.AA’>
tmp.show() 可以調用類對象里面的方法

本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/88169

(0)
daishitongdaishitong
上一篇 2017-10-30 20:16
下一篇 2017-10-31 14:48

相關推薦

  • zabbix表分區(適用于zabbix2.0.x,zabbix2.2.x和zabbix2.4.x)

    本文主要介紹了zabbix進行數據庫表分區的方法:         在系統監控中,zabbix已經代替了nagios+cacti,zabbix以其良好的圖形展示和高度自定義贏得了很多運維人員的喜愛。但是由于在工作中,zabbix跑的時間過長(我們公司跑了將近3年),web頁面經??D,監控…

    Linux干貨 2015-10-27
  • vim編輯器整理(無演示)

    vim編輯器 vim編輯器是linux中最強大的全屏幕純文本編輯器,他是vi編輯器的增強版。 文本編輯器: 文本:純文本,在ASCII角度講是純粹的不加任何修飾的文本信息     支持Unicode編碼方式 文本編輯器種類: 行編輯器:sed 全屏編輯器:nano,vi vi : (VIsual&n…

    Linux干貨 2016-08-10
  • 特殊權限

    特殊權限 文件特殊權限 一、SUID(4) SUID:當s這個標志出現在文件所有者的x權限上時,就被稱作SUID。 SUID的功能和限制:1、僅僅對二進制程序有效; 2、執行者對程序需要X的執行權限; 3、本權限僅僅在執行該程序的過程中有效; 4、執行者將具有該程序所有者的權限。 5、SUID僅僅可以用在二進制程序上,…

    Linux干貨 2016-08-05
  • yum更多用法及源碼編譯安裝apache和當天作業

    一、yum的更多用法 上篇文章介紹了yum的基礎用法及yum源的基本配置,除此之外yum還有更多的用法,以下將繼續介紹yum的使用方法。 1、yum-config-manager工具,該工具可以自動生成yum的repo文件,而不需要手動創建編寫,使用方法如下: 用法:yum-config-manager [options] [section] -add-re…

    Linux干貨 2016-08-24
  • N25-第七周作業

    第七周 1、創建一個10G分區,并格式為ext4文件系統; (1) 要求其block大小為2048, 預留空間百分比為2, 卷標為MYDATA, 默認掛載屬性包含acl; [root@zf ~]# fdisk /dev/sdb Command (m for help): n Command action e extended p primary partit…

    Linux干貨 2017-02-24
  • 2018近期it運維大會合集,這五場值得關注!

    17年,我們不僅看到Google、Facebook、Amazon、LinkedIn、Netflix、Airbnb等互聯網巨頭在與DevOps親密接觸,傳統軟件公司如Adobe、IBM、Microsoft、SAP等,亦或是網絡業務非核心的蘋果、沃爾瑪、索尼影視娛樂、星巴克等都在采用DevOps,更看到了國內一大片企業開始鐘情于此。

    2018-03-01
欧美性久久久久