日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python关闭对象语法_Python基础及语法(七)

發布時間:2025/3/11 python 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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基础及语法(七)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。