StringIO

StringIO
io模塊中的類
From io import StringIO
內存中,開辟的一個文本模式的buffer,可以像文件對象一樣操作它
當close方法被調用的時候,這個buffer會被釋放
StringIO操作
getvalue() 獲取全部內容。跟文件指針沒有關系
from io import StringIO
# 內存中構建
sio = StringIO() # 像文件對象一樣操作
print(sio.readable(), sio.writable(), sio.seekable())
sio.write(“magedu\nPython”)
sio.seek(0)
print(sio.readline())
print(sio.getvalue()) # 無視指針,輸出全部內容
sio.close()
好處
一般來說,磁盤的操作比內存的操作要慢得多,內存足夠的情況下,一般的優化思路是少落地,減少 磁盤IO的過程,可以大大提高程序的運行效率
io模塊中的類
from io import BytesIO
內存中,開辟的一個二進制模式的buffer,可以像文件對象一樣操作它
當close方法被調用的時候,這個buffer會被釋放
from io import BytesIO
bio = BytesIO()
print(bio.readable(),bio.writable(),bio.seekable())
bio.write(b”magedu\nPython”)
bio.seek(0)
print(bio.readline())
print(bio.getvalue())
bio.close()
類文件對象,可以像文件一樣操作
socket對象、輸入輸出對象(stdin、stdout)都是類文件對象
from sys import stdout
f = stdout
print(type(f))
f.write(‘magedu.com’)
路徑操作

from os import path

p = path.join(‘/etc’,’sysconfig’,’network’)
print(type(p),p)
print(path.exists(p))
print(path.split(p))
print(path.abspath(‘.’))
p = path.join(‘o:/’,p,’test.txt’)
print(path.dirname(p))
print(path.basename(p))
print(path.splitdrive(p))

p1 = path.abspath(__file__)
print(p1,path.basename(p1))
with p1 != path.dirname(p1):
p1 = path.dirname(p1)
建議使用pathlib模塊,提供path
from pathlib import Path
目錄操作
初始化p = Path()#當前目錄
p = Path(‘a’,’b’,’c/d’) #當前目錄下的a/b/c/d
p = Path(‘/etc’) #根下的etc目錄
路徑拼接和分解
操作符
Path對象/path對象
Path對象/字符串或則字符串 / path對象
分解
Parts屬性 , 可以返回路徑中的每一個部分
Joinpath(*other)連接多個字符串到path對象中
p = Path
p = p / ‘a’
p1 = ‘b ‘ /a
p2 = Path(‘c’)
p3 = p2 / p1
print(p3.parts)
p3.joinpath(‘etc’,’init.d’.path(‘httpd’))
獲取路徑,str獲取路徑字符串,bytes獲取路徑字符串的bytes
p = Path(‘/etc’)
print(p.parent.parent)
for x in p.parents:
print(x)
Name,stem,suffix,suffixes,with_suffix(suffix),with_name(name)
name目錄的最后一個部分
Suffix 目錄中的最后一個部分的擴展名
Stem 目錄最后一個部分,沒有后綴
Suffixes 返回多個擴展名列表
With_suffix(suffix)補充擴展名到路徑尾部,返回新的路徑,擴展名存在則無效
With_name(name)替換目錄最后一個部分并返回一個新的路徑
p = Path(‘/magedu/mysqllinstall/mysql.tar.gz’)
print(p.name)
print(p.suffix)
print(p.suffixes)
print(p.stem)
print(p.with_name(‘mysql-5.tgz’))
p = Path(‘README’)
print(p.with_suffix(‘.txt’))

Cwd()返回當前工作目錄
Home()返回當前家目錄

Is_dir()返回是否是目錄,目錄存在返回True
Is_()是否是普通文件,文件存在返回True
Is_symlink()是否是軟連接
Is_socket()是否為socket文件
Is_block_device()是否是塊設備文件
Is_char_device()是否是字符設備
Is_absolute()是否是絕對路徑

Resolve()也可以返回一個新的路徑。但是推薦使用resolve
Exists()目錄或者文件是否存在
Rmdir()刪除空目錄,沒有提供判斷目錄為空的方法
Touch(mode=0o666,exist_ok=Ture)創建一個文件
As_uri()將路徑返回成URI,例如file:///etc/passwd
Mkdir(mode=0o777,parents=False,exist_ok=False)
Parents,是否創建父目錄,True等同于mkdir -p ;False時,父目錄不存在,則拋出FileNoteFoundError
Exist_ok參數,在3.5版本中加入,False是路徑存在,拋出FileExistsError;True時,FileExistsError被忽略
Iterdir
for x in p.parents[len(p.parents)-1].iterdir():
print(x,end=’\t’)
if x.is_dir():
flag = False
for _ in x.iterdir():
flag = True
break
print(‘dir’,’Not Empty’ if flag else ‘Empyt’,sep=’\t’)
elif x.is_file():
print(‘file’)
else:
print(‘other file’)

通配符
Glob(pattern)通配給定的模式
Rglob(patttern)通配給定的模式,遞歸目錄
返回一個生成器
List(p.glob(‘test*’)) #返回當前目錄對象下的test開頭的文件
List(p.glob(‘**/*.py)) #遞歸所有目錄。等同于rglob
g= p.rglob(‘*.py’) #生成器
Next(g)
匹配
Match(pattern)
模式匹配,成功返回True
Path(‘a/b.py’).match(‘*.py’)
Path(‘/a/b/c.py’).match(‘b/*.py’)
Path(‘/a/b/c.py’).match(‘a/*.py’)
Path(‘/a/b/c.py’).match(‘a/*/*.py’)
Path(‘/a/b/c.py’).match(‘a/**/*.py’)
Stat()相當于stat命令
Lstat()同stat(),但如果符號鏈接,則顯示符號鏈接本身的文件信息
Open(mode=’r’,buffering=-1,encoding=None,error=None,newline=None)
使用方法類似內建函數open,返回一個文件對象
3.5增加的新函數read_bytes()
以’rb’方式讀取路徑對應文件 返回二進制流。看源碼
Read_text(encoding=None,errors=None)
以’rt’方式讀取路徑對應文件,返回文本
Path.write_bytes(data)
以’wb’方式寫入數據到路徑對應文件
Write_text(data,encoding=None,errors=None)
以’wt’方式寫入字符串到路徑對應文件
from pathlib import Path
p = Path(‘my_binary_file’)
p.write_bytes(b’Binary file contents’)
p.read_bytes()

p = Path(‘my_text_file’)
p.write_text(‘text file contents’)
p.read_text()

from pathlib import Path
p = Path(‘o:/test.py’)
p.write_text(“HELLO PYTHON”)
print(p.read_text())
with p.open() as f:
print(f.read(5))
os模塊
操作系統平臺
os.name Windows是nt,linux是posix
os.uname() *nix支持
sys.platform Windows顯示win32,linux顯示linux
os.listdir(‘0:/temp’)
返回目錄列表
os也有open,read,write等方法,但是太低級,建議使用內建函數
$ln -s test t1建立一個軟連接
os.stat(path,*,dir_fd=None,follow_symlinks=True)
本質上調用的linux上的stat
Path:路徑的string或者bytes,或者fd文件的描述符
follow_symlinks True返回文件本身信息,Flase且如果是軟連接則顯示軟連接的本身
os.chmod(path,mode,*,dir_fd=None,follow_symlinks=True)
os.chmod(‘test’,0o777)
os.chown(path,uid,git)改變文件的屬主,屬組,但是需要足夠的權限
Shutil模塊
到目前為止
文件拷貝:使用打開2個文件對象,源文件兌取內容,寫入目標文件中來完成拷貝過程,但是這樣丟失stat數據信息,權限等,因為根本沒有復制這些信息過去。
Python提供了一個很方便的庫shutil(文件的高級操作)
Copy復制
Copyfileobj(fsrc,fdst[lenth])
文件的對象的復制,fsrc和fdst是open打開的文件對象,復制內容。Fdst要求可寫。
Lenth 指定了表示buffer的大?。?br />import shutil
with open(‘o:/test’,’r+’) as f1:
f1.write(‘abcd\n1234’)
f1.flush()
with open(‘o:/test1′,’w+’) as f2:
shutil.copyfileobj(f1,f2)

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

(0)
zhangmengzhangmeng
上一篇 2018-05-07
下一篇 2018-05-07

相關推薦

  • 解析式

    列表解析式和字典解析式 datetime模塊 對日期,時間,時間戳的處理 datetime類 today()返回本地時區當前的datetime對象 now(tz=None)返回當前時間的datetime對象,時間到微秒,如果tz為None,返回和today()一樣 utcnow()沒有時區的當前時間 fromtimestamp(timestamp,tz=Zo…

    2018-04-09
  • Python數據結構

    數據結構個人總結,方便以后查找。

    Python筆記 2018-04-01
  • Python 部分知識點總結(六)

    此篇博客只是記錄第八周未掌握或不熟悉的知識點,用來加深印象。

    Python筆記 2018-05-02
  • 函數

    函數 數學定義:y=f(x),y是x的函數,x是自變量 Python函數 有若干個語句塊,函數名稱,參數列表構成,它是組織代碼的最小單元 完成一定作用 函數的作用 結構化編程對代碼的最基本的封裝,一般按照功能組織一段代碼 封裝的目的為了復用,減少了冗余代碼 代碼更加簡潔美觀,更加易讀 函數的分類 內建函數,如max(),reversed()等 庫函數,如ma…

    2018-04-16
  • Python 部分知識點總結(四)

    此篇博客只是記錄第六周未掌握或不熟悉的知識點,用來加深印象。

    Python筆記 2018-04-14
  • Python內置數據結構——列表

    知識框架圖 學習筆記 數據結構分類 數值 int、float、complex、bool都是class int:長整型,沒有上限,取決于內存區域大小 float:支持十進制和科學計數法,僅支持雙精度 complex:復數,有實數和虛數部分 bool:int的子類,True、False對應1、0,可以和整數直接運算 序列對象 字符串str 列表list 元組tu…

    2018-03-26
欧美性久久久久