文件操作

文件常用操作

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基础及语法(七)相关推荐

  1. python中的正则表达式语法_Python基础教程之正则表达式基本语法以及re模块

    什么是正则: 正则表达式是可以匹配文本片段的模式. 正则表达式'Python'可以匹配'python' 正则是个很牛逼的东西,python中当然也不会缺少. 所以今天的Python就跟大家一起讨论一下 ...

  2. python判断性别程序设计_python基础15 ---面像对象的程序设计

    面向对象的程序设计 一.面向对象的程序设计简介 1.面向对象程序设计的由来. 我们之前虽然学习过了面向过程的程序,它的核心是面向过程,一步一步的设计好了的流程,虽然极大的降低了程序的复杂度,但是一个设 ...

  3. Python按键精灵自动化_Python基础:了解Python与pycharm

    认识 Python 人生苦短,我用 Python -- Life is short, you need Python 目标 Python 的起源 为什么要用 Python? Python 的特点 Py ...

  4. python常用变量名_python基础知识整理

    Python Python开发 Python语言 python基础知识整理 序言:本文简单介绍python基础知识的一些重要知识点,用于总结复习,每个知识点的具体用法会在后面的博客中一一补充程序: 一 ...

  5. python定义一个人类_python基础课程 第9章 面向对象编程(上) 一场人类进化史

    日月灿烂,若出其中,星汉灿烂,若出其里. -- 曹操.观沧海 东汉末年 人类文明以降,总会有无数的人通过对世界的观察和思考去总结我们从哪里来,要往哪里去. 遥远的古代我们的祖先通过想象力把数字变成了符 ...

  6. python控制语句第一章_python基础第一章

    Python基础 第一个python程序 变量 程序交互 基本数据类型 格式化输出 基本运算符 流程控制if...else... 流程控制-循环 第一个python程序 文件执行 1.用notepad ...

  7. python编程语言符号大全_Python基础学习篇章三分析

    一. Python对象类型 1. 对象是Python最基本的概念,一个Python程序可以分解为模块.语句.表达式.和对象.它们的关系如下:(1)程序由模块构成 (2)模块包含语句 (3)语句包含表达 ...

  8. python语句块规范_Python基础语法——代码规范判断语句循环语句

    Python基础语法 代码的执行顺序从上到下 从左到右 代码规范模块名,包名,普通数据量一般小写字母,多个单词之间用 _ 连接 不要用系统定义的名称,具有特殊意义的表示符,如:doc,txt之类的 每 ...

  9. python判断语法_Python基础语法——代码规范判断语句循环语句

    Python基础语法 代码的执行顺序 从上到下 从左到右 代码规范 模块名,包名,普通数据量一般小写字母,多个单词之间用 _ 连接 不要用系统定义的名称,具有特殊意义的表示符,如:doc,txt之类的 ...

最新文章

  1. 独家 | CycleGAN之美 赛马翻译成斑马背后的直觉和数学(附论文)
  2. crf与bitrate对照表
  3. LeetCode算法入门- Remove Nth Node From End of List -day17
  4. PHP获取input中的值相同报错,laravel单元测试之phpUnit中old()函数报错解决_php实例...
  5. python itertools_itertools
  6. Silverlight 2 中简单的2.5D控件
  7. 网络协议--05--IP子网划分
  8. Linux copy命令 omitting directory
  9. 怎样选择适合自己的视频加密软件方案?
  10. Elasticsearch许可证过期导致ES用不了的问题
  11. 依赖包存在,但是仍依然报找不到包的问题
  12. 妈妈和四川地震伤员住院的日子-感谢广医附属第一人民医院骨科的医生护士
  13. mysql 分桶_mysql的分组和过滤桶where的组合运用
  14. 医学成像系列:医学图像特征与品质因素概述
  15. 使用Lucene开发简单的站内新闻搜索引擎(索引的搜索)
  16. windows10配置Docker容器独立IP地址互相通信
  17. Oracle 静默安装的db_install.rsp 文件
  18. nacos--基础--4.4--集成--SpringBoot--Naming模块
  19. 使用Portainer管理Docker镜像
  20. 1-12日 圣杯策略实盘结果

热门文章

  1. 关于阿拉伯数字转化成为大写汉字
  2. Ubuntu 9.10 升级到ext4
  3. javascript面向对象5
  4. 三年java经验应该会什么?
  5. Spring Bean的生命周期以及IOC源码解析
  6. Oracle触发器和MySQL触发器之间的区别
  7. Eclipse中Copy Qualified Name复制类全名解决办法
  8. Android 6.0 源代码编译实践
  9. netty 游戏服务器框图_基于Netty和WebSocket协议实现Web端自动打印订单服务方法与流程...
  10. linux版本fedora,技术|初级:如何更新 Fedora Linux 系统