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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551877.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

route和bridge是什么意思_port link-mode bridge是什么意思

展开全部工作在二层模式。bridge 英[brɪdʒ] 美[brɪdʒ]n 桥; 起联系作用的事物e68a8462616964757a686964616f31333433656131; 桥梁; 纽带; (舰船的) 驾驶台; 船…

怎么打开网络访问 计算机共享,电脑只要打开共享提示“无法启用共享访问”如何解决...

电脑升级到雨林木风win7系统后发现一个问题,那就是无法启用共享访问了,每次打开都会弹出提示“无法启用共享访问 错误Ox80004005:未指定的错误”,即使重装系统也没办法解决。后面检查后发现是关闭了“Windows firewall”服务进程造…

用户信息填写web代码_Web前端常见问题汇总

1.get 和post的区别1.1数据传输大小:get 传输数据大小限制在1KB,post传输数据大小没有严格限制1.2缓存和安全:get请求某个url,数据追加到url中发送(http的header传送),即浏览器将各个表单字段元…

页表长度和页表大小_在请求调页系统中,若逻辑地址中的页号超过页表控制寄存器中的页表长度,则会引起( ) 。_学小易找答案...

【单选题】根据法律规定,适龄儿童和青少年都必须接受,国家、社会、家庭必须予以保证的 国民 教育是 ( )【单选题】给定如下前提:(P∧Q)→R, R∨S, S 其逻辑结论(有效结论)是( )【判断题】This warranty does not become void under any circumstance during the warranty perio…

qq农场 html5,腾讯客服-QQ农场/牧场-QQ农场打不开该怎么解决?

QQ农场打不开该怎么解决?若在您的电脑网络环境没有问题的情况下,QQ农场无法打开,请您查看客服网站右上角的公告信息是否当天系统在升级维护中,若是系统升级维护中,可能会导致农场无法正常进入,界时请您更换…

python发展路线_Python进阶路径-从学徒到大师

慕盖茨9453107了解(更深入地)关于内存管理的Python数据类型及其作用正如社区中的一些人所知道的,我教授Python课程,其中最受欢迎的课程是综合性的Intro Intermediate课程以及介绍各种应用程序开发领域的“高级”课程。通常,我会被问到一个非…

php三级分销系统制作_微分销商城系统创建三级微商分销体系方法

微分销商城系统如何完善创建三级微商分销体系,微商城的建设成为现在商家的新选,如果成功经营,将会让商家获得大量收益。下面就让摩盒mohe详细说说。1、系统一键分销功能促使微商城提升销量分销商城系统的好坏,决定着微商城用户能否…

未来的科学计算机作文800字,未来的高科技学校作文800字

未来的高科技学校作文800字二十年以后,我们的学校也变成了高科技的学校。早晨我来到学校门口,发现学校没有大门。这是怎么回事?难道学校不怕有坏人吗?我心想。这时,我的身边突然出现了一个身上有许多按钮的机器人。它说…

jaccard相似度_如何计算两个字符串之间的文本相似度?

推荐阅读:面试BAT 却被小小字符串秒杀?这13道题帮你一举击败字符串算法题字节跳动秋招面经:后端开发工程师,已拿意向书前言平时的编码中,我们经常需要判断两个文本的相似性,不管是用来做文本纠错或者去重等…

ap接口 php_小白php API初体验 php api文档 php api接口开发 php web ap

这里的php 写API其实就是指提供一个WebServiceWebSite : 1.以html格式响应返回 2.由用户通过浏览器来接入WebService : 1.以json/Xml格式返回 2.由程序接入 3.用来实现不同平台的交互How to begin说简单点,就是传数据的,就是封装各种方法让其它人来调用A…

powerdesigner 导入html,使用PowerDesigner导出Word/HTML的一些配置

《JavaScript高级程序设计》学习笔记系统学习JS, 从入门,通过学习jQuery或者angularJS源码来进阶. 第1章 JavaScript简介 1.JS问世的目的是处理以前由服务器端 ...css link和@import区别用法这里link与import介绍的是html引入css的语法单词.两者均是引入css到html的…

java按钮陷下去_付费?广告?捐款?如何让开源软件活下去?

【CSDN编者按】作为一名使用开源软件的开发者,你是否曾思考过开源软件是如何盈利?如何运营下去的?本文作者从正反两面给出自己看到的案例和建议,思考让开源软件持续下去的方式,一起来看看吧。作者 | TJ VanToll译者 | …

clickhouse mysql引擎_ClickHouse为啥能做到变态快,超 MySQL 801倍?

原标题:ClickHouse为啥能做到变态快,超 MySQL 801倍?阿里、腾讯、字节跳动这种大厂每天数据规模达到千亿、万亿级别,中小企业手里要是没点儿数据,根本不好意思说自己是互联网公司。有数据是一回事,让数据发…

教资计算机科学与技术教资,教资笔试查成绩啦!广师大未来教师们又前进一步...

原标题:教资笔试查成绩啦!广师大未来教师们又前进一步这里是今日起考生登录ntce.neea.edu.cn“中小学教师资格考试网”即可查询笔试成绩啦惊不惊喜 意不意外查成绩的人这么多可以看出考取教师资格证已然成为大学生中的“香饽饽”日前,茂名滨海…

控制台启动jar包关闭控制台怎么关java程序_Jpom一款简而轻的低侵入式Java运维、监控软件...

你为什么需要JpomSpringBoot、Jboot等框架开发的项目通常是以Jar的方式在后台运行的,如果只有一两个项目,管理起来不是太麻烦,但是当项目多了以后,管理起来就不是那么方便了,当项目出现问题时,能够通过Jpom…

台式计算机如何双屏显示,电脑怎么分屏?|台式电脑双显示器连接方法

电脑怎么分屏?|台式电脑双显示器连接方法阅读:497时间:2019-08-10 23:24:36随着人们对时间效率的看中,比如在看报表的同时看电影,工作娱乐两不误,如果你也想要这样的工作环境,我们可以给电脑…

gossip 区块链_区块链中的P2P

区块链中P2P介绍p2p是什么为什么区块链需要P2P比特币、以太坊、超级账本和EOS的P2P对比P2P是什么P2P作为区块链网络中去中心化的标识P2P全称对等式网络(peer-to-peer),又称点对点技术,是无中心服务器、依靠用户群(peers)交换信息的互联网体系&#xff1b…

java 反射调用方法_java的反射机制,以及通过反射获取方法,变量等操作

我们应用会用到反射这个知识点,肯定是想要在运行时得到类的信息,根据类的那些信息去做一些特定的操作。那么,首先无疑就是得到类的信息,在JDK中提供了Class对象来保存类的信息。所以,反射的第一步就是得到Class对象。在…

微型计算机主机箱内的所有部件均由大规模,2012年自考《计算机应用基础》模拟试题...

《计算机应用基础》模拟试题一、单选题 (每空1分,共30分)1. 在Word的编辑状态,当前在汉字输入状态,若要切换到输入大写英文字母状态,应当按( )。A.Caps Lock键 B.Shift键 C.Ctrl 空格键 D.Ctrl Shift键2. 一个完整的计算机系…

织梦自定义图片字段和缩略图一样_织梦图片集模型自定义图片字段调用

创建自定义函数打开/include/extend.func.php文件(注:这个文件就是系统预留的自定义函数接口文件,主要用于二次开发用的。如果你是老版本,默认没有这个文件,自己创建一个PHP文件即可),在最下面的?>上一行加入以下函…