如果有一定语言基础的,一定对文件操作十分得"熟悉"!当然,这种熟悉是 引起人恼怒的  也不为过。 python 也有自己的文件操作,那它跟C\C++又有何不同呢?

一、文件的基本操作

(1)打开或关闭 

内建函数open, 能够打开一个指定路径下的文件, 返回一个文件对象.


open最常用的有两个参数, 第一个参数是文件名(绝对路径或者相对路径), 第二个是打开方式, 'r'/'w'/'a'/'b',表示读(默认) /写/追加写/二进制.

注:关于内建函数

我们反复遇到了 "内建函数" 这个词. 内建函数其实是包含在 __builtins__ 这个模块中的一些函数.
而 __builtins__ 这个模块Python解释器会自动包含
 

注:关于文件对象

我们学习C语言知道 FILE* , 通过 FILE* 进行文件读写操作 ,我们学习Linux时又知道, FILE* 结构中其实包含了文件描述符, 操作系统是通过文件描述符来对文件操作的。

Python的文件对象, 其实也包含了文件描述符, 同时也包含了这个文件的一些其他属性. 本质上也是通过文件描述符完成对文件的读写操作。

#文件操作
f = open('./test.txt', 'w') #打开文件
f.close() #关闭文件

(2)读文件

读文件的前提是,该文件被打开之前已经存在。

 read: 读指定长度字节数的数据, 返回一个字符串。

 readline: 读取一行数据, 返回一个字符串。

 readlines: 读取整个文件, 返回一个列表. 列表中的每一项是一个字符串, 代表了一行的内容。

该文件已经存在; 

python打开内嵌提示 python内置函数 用来打开文件_python

我们分别用上面的三个read进行读取;

python打开内嵌提示 python内置函数 用来打开文件_python_02

除开用readlines读取,也可以直接进行循环读取(但这样效率上比 readines 更慢);

python打开内嵌提示 python内置函数 用来打开文件_python_03

(3)写文件 

write: 向文件中写一段字符串.
如需写文件, 必须要按照 'w' 或者 'a' 的方式打开文件. 否则会写失败


writelines: 参数是一个列表, 列表中的每一个元素是一个字符串
并没有一个 writeline 这样的函数. 因为这个动作等价于 write 时在字符串后面加上 '\n'. 同理, 使用writelines的时候, 也需要保证每一个元素的末尾, 都带有 '\n‘’。

write: 

python打开内嵌提示 python内置函数 用来打开文件_字符串_04

writelines; 

python打开内嵌提示 python内置函数 用来打开文件_python打开内嵌提示_05

(4)关于读写缓冲区 

我们知道, C语言库函数中的fread, fwrite和系统调用read, write相比, 功能是类似的. 但是
fread/fwrite是带有缓冲区的(这是语言级别的缓冲区)。

Python的文件读写操作, 既可以支持带缓冲区, 也可以选择不带缓冲区。

(5)文件对象

文件具备随机访问能力. 这个过程是通过操作文件指针完成的
 

seek: 将文件指针移动到从文件开头算起的第几个字节上. 有两个参数. 第一个参数offset表示偏移的字节数. 第二个参数whence表示偏移量的起始位置在哪. 值为0, 表示从开头计算, 值为1:表示从当前位置.值为2: 表示从文件结尾位置.

tell: 获取当前文件指针指向的位置. 返回当前位置到文件开头的偏移量

python打开内嵌提示 python内置函数 用来打开文件_python打开内嵌提示_06

python打开内嵌提示 python内置函数 用来打开文件_字符串_07

(6)上下文管理器

如果打开了文件  不选择关闭 会发生什么?

我想从聪明的你一定知道。 系统的文件资源描述符越来越少。 直到最后 抛异常 告诉你没有更多的文件描述符了。

python打开内嵌提示 python内置函数 用来打开文件_文件操作_08

可能你会说,“我很严谨! 打开文件后 我一定 会吗写一个close”!  然而事实上,很多情况不单单是我们 忘记close。 而是遇到整个代码里 如果有异常的地方,那么 代码可能就不会跑到close处。

从而导致 文件资源泄漏。 C++中为解决这个问题, 特地引入了智能指针来 用来管理这些资源。

那么python是如何解决的呢?

ith open('out') as f:
print(''.join(f.readlines())) 

python打开内嵌提示 python内置函数 用来打开文件_文件描述符_09

        在with语句块内进行文件操作. 当文件操作完毕之后, 出了with语句之外. 就会自动执行f的关闭操作.一个支持上下文协议的对象才能被应用于with语句中. 我们将这种对象称为上下文管理器.

        Python中很多内置对象都是上下文管理器, 例如文件对象, 线程锁对象等


二、文件系统的基础操作 

(1)文件路径的操作 

os.path这个模块中, 包含了一些实用的路径操作的函数 


python打开内嵌提示 python内置函数 用来打开文件_python_10

python打开内嵌提示 python内置函数 用来打开文件_字符串_11

python打开内嵌提示 python内置函数 用来打开文件_字符串_12

(2)常见的文件系统操作

os模块中包含了很多对文件/目录的基础操作, 参见下表

python打开内嵌提示 python内置函数 用来打开文件_python打开内嵌提示_13

python打开内嵌提示 python内置函数 用来打开文件_文件操作_14


总结:

①open('文件名','w/r/a',encoding = 'xxx') close()

②read\readline\readlines\  write\writelines

③os.path 查找系统路径模块的一些 函数还是比较重要。 exist

本篇到此结束了

感谢您的阅读