python关闭对象语法_Python基础及语法(七)
文件操作
文件常用操作
open:打開
read:讀取
write:寫入
close:關閉
readline:行讀取
readlines:多行讀取
seek:文件指針操作
tell:指針位置
打開操作
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
mode模式
r:只讀打開
w:只寫打開新文件
x:創建新文件
a:只寫打開,追加內容
b:二進制模式
t:缺省模式,文本模式
+:讀或寫打開后,追加缺失模式
buffering緩沖區
缺省-1,二進制模式使用io.DEFAULT_BUFFER_SIZE可以查到默認是4096或8192。文本模式終端設備下是行緩沖。
0表示關閉行緩沖。
1表示只使用行緩沖。
大于1表示設置二進制模式緩存值。
緩沖區指暫時放置在內存。
encoding
編碼
errors
None和strict表示錯誤拋出異常,ignore表示忽略。
newline
讀時:缺省為None,表示'\r','\n','\r\n'均轉為'\n',‘’表示不換行,其它字符可為分行。
寫時:缺省表示'\n'被替換為系統缺省行分隔符os.linesep,'\n'表示'\n'不替換,其它字符表示換行符會替換為指定字符。
closefd
關閉文件描敘符,True表示關閉它。False會在文件關閉后保留描敘符。fileobj.fileno()查看
文件指針
seek(offset, whence = 0)
offset為0時代表文本開頭,為1時代表當前指針位置,為2時代表文件末端。
文本模式下offset只能時0的時候whence可以不為0,為正整數,表示偏移多少字節。
二進制模式下offset為0時whence為正整數,表示便宜多少字節,offset為1和2時可正可負。
read讀取
read(size=-1)
缺省-1表示指針所在位置后全部讀取,填正數表示讀取指針位置后多少個字節。
行讀取
readline(size=-1)
缺省-1一行行讀取,填正數表示讀取行內前幾個字節。
readlines()
按行讀取所有內容,返回列表。
write寫
write(s),文本模式時,從指針開始寫入s并返回寫入字節數,二進制時把bytes寫入并返回字節數。
writelines(lines),把字符串列表寫入文件。
close關閉
關閉文件。
其它
seekable():是否可seek
readable():是否可讀
writeable():是否可寫
closed:是否已關閉
1 f = open('test.txt', 'w+')2 f.write('HI\n')3 f.writelines(['Hello\n', 'a'])4 f.seek(0)5 print(f.readlines()) #['HI\n', 'Hello\n', 'a']
6 print(f.seekable()) #True
7 print(f.readable()) #True
8 print(f.writable()) #True
9 print(f.closed) #False
10 f.close()11 print(f.closed) #True
上寫文管理
文件打開用完后一定要關閉,不然系統會有進程殘留,久了當數量達到上限張不能再打開文件導致錯誤。
with語句可以有效控制文件關閉。
1 with open('test') as f:2 print(f.closed) #False
3 print(f.closed) #True
StringIO和BytesIO
IO模塊中的類,在內存中開辟一個處理文本或二進制文本的空間,close后內存釋放。
1 importio2 f =io.StringIO()3 f.write('HI') #HI
4 f.seek(0)5 print(f.read())6 b =io.BytesIO()7 b.write(b'a')8 b.seek(0)9 print(b.read()) #b'a'
file-like對象
類文件對象,可以像文件一樣操作。
1 importsys2 f =sys.stdout3 f.write('HI')4 f =sys.stderr5 f.write('Hello')6 #HelloHI
正則表達式
正則表達式修飾符 - 可選標志
修飾符描述
re.I
使匹配對大小寫不敏感
re.L
做本地化識別(locale-aware)匹配
re.M
多行匹配,影響 ^ 和 $
re.S
使 . 匹配包括換行在內的所有字符
re.U
根據Unicode字符集解析字符。這個標志影響 \w, \W, \b, \B.
re.X
該標志通過給予你更靈活的格式以便你將正則表達式寫得更易于理解。
正則表達式模式
模式描述
^
匹配字符串的開頭
$
匹配字符串的末尾。
.
匹配任意字符,除了換行符,當re.DOTALL標記被指定時,則可以匹配包括換行符的任意字符。
[...]
用來表示一組字符,單獨列出:[amk] 匹配 'a','m'或'k'
[^...]
不在[]中的字符:[^abc] 匹配除了a,b,c之外的字符。
re*
匹配0個或多個的表達式。
re+
匹配1個或多個的表達式。
re?
匹配0個或1個由前面的正則表達式定義的片段,非貪婪方式
re{ n}
匹配n個前面表達式。例如,"o{2}"不能匹配"Bob"中的"o",但是能匹配"food"中的兩個o。
re{ n,}
精確匹配n個前面表達式。例如,"o{2,}"不能匹配"Bob"中的"o",但能匹配"foooood"中的所有o。"o{1,}"等價于"o+"。"o{0,}"則等價于"o*"。
re{ n, m}
匹配 n 到 m 次由前面的正則表達式定義的片段,貪婪方式
a| b
匹配a或b
(re)
G匹配括號內的表達式,也表示一個組
(?imx)
正則表達式包含三種可選標志:i, m, 或 x 。只影響括號中的區域。
(?-imx)
正則表達式關閉 i, m, 或 x 可選標志。只影響括號中的區域。
(?: re)
類似 (...), 但是不表示一個組
(?imx: re)
在括號中使用i, m, 或 x 可選標志
(?-imx: re)
在括號中不使用i, m, 或 x 可選標志
(?#...)
注釋.
(?= re)
前向肯定界定符。如果所含正則表達式,以 ... 表示,在當前位置成功匹配時成功,否則失敗。但一旦所含表達式已經嘗試,匹配引擎根本沒有提高;模式的剩余部分還要嘗試界定符的右邊。
(?! re)
前向否定界定符。與肯定界定符相反;當所含表達式不能在字符串當前位置匹配時成功
(?> re)
匹配的獨立模式,省去回溯。
\w
匹配字母數字
\W
匹配非字母數字
\s
匹配任意空白字符,等價于 [\t\n\r\f].
\S
匹配任意非空字符
\d
匹配任意數字,等價于 [0-9].
\D
匹配任意非數字
\A
匹配字符串開始
\Z
匹配字符串結束,如果是存在換行,只匹配到換行前的結束字符串。c
\z
匹配字符串結束
\G
匹配最后匹配完成的位置。
\b
匹配一個單詞邊界,也就是指單詞和空格間的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。
\B
匹配非單詞邊界。'er\B' 能匹配 "verb" 中的 'er',但不能匹配 "never" 中的 'er'。
\n, \t, 等.
匹配一個換行符。匹配一個制表符。等
\1...\9
匹配第n個分組的子表達式。
\10
匹配第n個分組的子表達式,如果它經匹配。否則指的是八進制字符碼的表達式。
詳細正則表達式參考:https://www.w3cschool.cn/regex_rmjc/
路徑操作
from os import path模塊
1 from os importpath2 p = path.join('d:/', 'python', 'vn')3 print(p, type(p)) #d:\python\vn
4 print(path.exists(p)) #True 或 False 表示存在或不存在
5 print(path.split(p)) #('d:\\python', 'vn'),分割路徑
6 print(path.dirname(p), path.basename(p)) #d:\python vn 路徑和基名
7 print(path.abspath(''), path.abspath('.')) #絕對路徑
8 print(path.abspath(__file__)) #打印當前文件路徑
9 print(path.splitdrive(p)) #('d:', '\\python\\vn'),windows方法
from pathlib import Path模塊
1 from pathlib importPath2 p = Path('.') #空白,'', '.'均為當前目錄
3 print(Path('d:/', 'python/vn')) #d:\python\vn
4 print(Path('d:/', Path('python', 'vn'))) #d:\python\vn
5 p1 = 'vn' /p6 p2 = 'python' /p17 p3 = p1 /p28 print(p1, p2, p3) #vn python\vn vn\python\vn
9 print(p3.joinpath('a', 'b/c', Path('d/e'))) #vn\python\vn\a\b\c\d\e
10 print(p3.parts) #('vn', 'python', 'vn')
11 print(p3.parent) #vn\python
12 for i inp3.parents:13 print(i)14 #vn\python
15 #vn
16 #.
17 p = Path('/a/b/c/d/e.py')18 print(p.parent) #\a\b\c\d
19 print(p.name) #e.py
20 print(p.stem) #e
21 print(p.suffix) #.py
22 print(p.suffixes) #['.py']
23 print(p.with_name('f')) #\a\b\c\d\f
24 print(p.with_name('f').with_suffix('.txt')) #\a\b\c\d\f.txt
25 print(p.cwd()) #返回當前工作目錄
26 print(p.home()) #返回當前家目錄
27 print(p.exists()) #返回True或False,判斷目錄或文件是否存在
28 print(p.is_dir()) #返回True或False,判斷是否為目錄
29 print(p.is_file()) #返回True或False,判斷是否為文件
30 print(p.is_symlink()) #返回True或False,判斷是否為軟連接
31 print(p.is_socket()) #返回True或False,判斷是否為socket文件
32 print(p.is_block_device()) #返回True或False,判斷是否為塊設備
33 print(p.is_char_device()) #返回True或False,判斷是否為字符設備
34 print(p.is_absolute()) #返回True或False,判斷是否為絕對路徑
35 print(p.resolve()) #返回一個絕對路徑,如果是軟連接則直接被解析
36 print(p.absolute()) #獲取結對路徑
37 p = Path('d:/a/b')38 p.mkdir(parents=True, exist_ok=True) #創建目錄
39 p.rmdir() #刪除空目錄,目錄非空不能刪除,拋出異常
40 p.mkdir(parents=True, exist_ok=True) #創建目錄,parents為False時父目錄不存在拋出異常,exit_ok為False時路徑存在拋出異常
41 (p / 'c.py').touch() #創建文件
42 print(p.stat()) #獲取文件或目錄信息
43 print(p.lstat()) #獲取文件或目錄信息
44 print(p.as_uri()) #file:///d:/a/b,把路徑返回成URI
45 for i in Path('d:/').iterdir(): #迭代目錄里的文件和目錄
46 print(i)
通配符
glod(pattern)通配給定的模式,返回生成器對象
rglod(pattern)通配給定的模式,遞歸目錄,返回生成器對象
?代表一個字符
*代表任意個字符
[a-z]或[abc]代表一個字符
1 from pathlib importPath2 print(list(Path('d:/a/b').glob('c*'))) #返回c開頭的文件路徑列表
文件操作
1 from pathlib importPath2 p = Path('d:/a/b/c.py')3 p.write_text('a') #文檔模式寫入
4 p.write_bytes(b'a') #二進制模式寫入
5 print(p.read_text()) #a,文本模式讀取
6 print(p.read_bytes()) #b'a',二進制模式讀取
7 with Path('d:/a/b/c.txt').open() as f:8 print(f.read())
os模塊
操作系統平臺
1 from pathlib importPath2 importos3 print(os.name) #windows系統是nt,linux系統是linux
4 print(os.listdir(Path('d:/'))) #獲取目錄下文件和目錄信息
5 print(os.stat(Path('d:/a/b/c.py'))) #獲取文件信息
6 os.chmod(Path('d:/a/b/c.py'), 0o777) #修改權限
shutil模塊
高級文件操作庫
copy復制
1 from pathlib importPath2 importshutil3
4
5 defignore(src, names):6 print(src, names)7 ig = filter(lambda x: x.startswith('a'), names)8 print(list(ig))9 returnset(ig)10
11
12 a = Path('d:/a/b/a.txt') #原文件
13 b = Path('d:/a/b/b.txt')14 c = Path('d:/a/b/c.txt')15 d = Path('d:/a/b/d.txt')16 e = Path('d:/a/b/e.txt')17 with a.open() as aa:18 with b.open('w') as bb:19 shutil.copyfileobj(aa, bb) #復制內容
20 shutil.copyfile(a, c) #復制內容
21 shutil.copymode(a, c) #復制權限
22 shutil.copystat(a, c) #復制元數據和權限
23 shutil.copy(a, d) #復制內容和權限和部分元數據
24 shutil.copy2(a, e) #復制內容和權限和元數據
25 shutil.copytree(Path('d:/a/b/'), Path('d:/a/c/'), ignore=ignore) #復制目錄
26 #copytree(src, dst, symlinks=False, ignore=None, copy_function=copy2,ignore_dangling_symlinks=False)
27 #ignore接受一個函數,函數接收兩個參數src和os.listdir(src),返回set,copytree張過濾set的內容
rm刪除
1 from pathlib importPath2 importshutil3 shutil.rmtree(Path('d:/a/c')) #如同rm -rf一樣危險,慎用
move移動
1 from pathlib importPath2 importshutil3 shutil.move(Path('d:/a/b'), Path('d:/a/c'))
壓縮
from pathlib importPathimportshutil
shutil.make_archive(Path('d:/a/z'), 'zip', Path('d:/a/c/')) #把目錄c里的文件和目錄壓縮成z.zip
總結
以上是生活随笔為你收集整理的python关闭对象语法_Python基础及语法(七)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: r语言的MASS包干什么的_R语言综述的
- 下一篇: kali mysql停止服务器_从零开始