数据类型:指向一个特定的文件 。不管是文本或者文档。或者其他媒体文件。
声明方式: open(‘路径‘ , ‘模式‘ , encoding = ‘编码‘);
(1)路径 例如:‘C:\\\\Data\\\\temp.txt’ 斜杠需要转义,所以要写2个斜杠。 加 r 忽略转义 r‘C:\\Data\\temp.txt‘
(2)模式
区分下文件的形式有2种
【1】 文本
模式有
r 读 read 读取文本
w 写 write 写入文本 ,写模式会将内容替换掉
rw 读写
a 追加 append 向文本中追加内容
【2】二进制(也称之为流)
b
(3)encoding 编码 编码有 ACSII UTF8 GBK GB2312 .......还有很多
操作:
(1)我们在D盘的data文件夹下建立一个 temp.txt 在里面写入 欢迎使用Python
(2)接下来我们将文件读取输出到控制台上
我们通过 f.read() 方法将 temp.txt 文本文件的内容读取出来 (但是但是我们文本的换行却使用转义字符 \\n 显示了出来)
(3)接下来使用 print() 方法将将 f.read() 的内容输出
发现没有输出任何内容,这个是为什么呢?
原因是应为我们的 read() 函数的机制有一个指针,在读取的时候移动指针,当read结束的时候指针已经移动到了结尾。所以。当我们调用 read() 函数的时候,指针继续移动,却读不到任何内容,所以打印出空的
解决方法:
【1】重新创建文件的实例 这种比较麻烦
【2】 seek(0) 将指针重新移动到开头
(4) 读取完,我们不需要在继续操作了,可以调用 close() 方法关闭
(5) read(num) 指定读取数量 【注:read() 不指定读取数量则一次性读取所有信息,假设文件很大,那么读取效率问题】
可以看到指定参数读取多少个字符
(6) readlines() 读取行,返回一个数组
(7) readline() 读取一行 ,调用一次,读取一行。
循环输出 :为什么会看到隔一行呢? 因为print() 函数本身带一个 \\n 换行。 可以指定print() 函数的第二个参数 end,结束符号
(8) 关于编码的问题
先将我们的 D:\\data\\temp.txt 另存一下,编码选UTF-8 。然后我们接着读取
发现读取的时候抛出了一个异常。
这个时候就使用 encoding 参数,读取就正常了
我们新建一个 write.txt 文件进行写入操作 (不创建也可以,你open的时候也会帮你创建)
(9) write(str) 写入,返回写入字符的长度
打开文本却发现什么都没有。
我们write(str) 只是将文本写入到内存中。但是还没有保存,如果想保存,我们可以调用 flush() 或者你已经操作完了可以调用close()
flush() 方法将内存的操作进行映射到文本文件上 (不关闭文件情况下,输出缓存到硬盘上)
(10) writelines(list) 写入多个
产生文件并写入内容
我们往 temp.txt 中追加内容
附录
关于路径:
当我们省略掉盘符的时候,他是从系统的环境变量中找到Python的安装目录找文件的
引用 os 使用 os.getcwd() 方法可以获取我们Python的安装目录
os.chdir(path) 指定操作目录
关于 f.close() 即使我们不手动close() 内存到一定程度也会自动回收。不close()是一个不好的编程习惯
当然 Python 提供了一种了一种上下文的语法 代码段执行完成之后会自动调用回收 (应用场景,文件读写,数据库读写)
with 后面就是上下文的语法