Python零基础入门(12)-------文件读写

 数据类型:指向一个特定的文件 。不管是文本或者文档。或者其他媒体文件。

声明方式: open('路径' , '模式' , encoding = '编码');

             (1)路径 例如:‘C:\Data\temp.txt’  斜杠需要转义,所以要写2个斜杠。 加 r 忽略转义  r'C:Data emp.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 文本文件的内容读取出来 (但是但是我们文本的换行却使用转义字符 显示了出来)

(3)接下来使用 print() 方法将将 f.read() 的内容输出

发现没有输出任何内容,这个是为什么呢?

原因是应为我们的  read() 函数的机制有一个指针,在读取的时候移动指针,当read结束的时候指针已经移动到了结尾。所以。当我们调用 read() 函数的时候,指针继续移动,却读不到任何内容,所以打印出空的

解决方法:

               【1】重新创建文件的实例   这种比较麻烦

               【2】 seek(0) 将指针重新移动到开头

               

(4) 读取完,我们不需要在继续操作了,可以调用 close() 方法关闭 

           

(5) read(num)  指定读取数量   【注:read() 不指定读取数量则一次性读取所有信息,假设文件很大,那么读取效率问题】

可以看到指定参数读取多少个字符

 (6) readlines()  读取行,返回一个数组

 (7) readline()   读取一行 ,调用一次,读取一行。

循环输出 :为什么会看到隔一行呢? 因为print() 函数本身带一个 换行。 可以指定print() 函数的第二个参数 end,结束符号

 (8) 关于编码的问题

           先将我们的  D:data emp.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 后面就是上下文的语法

原文地址:https://www.cnblogs.com/Hong-Bin/p/8531397.html