python读写文件

一、python读写文件

在使用python编程时,经常会遇到读写文件的操作

对比windows中手动操作txt文档,我们来说明python中如何操作txt文件

① windows中手动操作txt文件的步骤

  1. 找到word文档
  2. 打开word文档
  3. 查看(或操作)word文档中的内容
  4. 关闭word文档

② python操作txt文件的步骤

  1. 找到并打开文件,然后获取返回的被打开文件的内存对象,该内存对象又叫做“文件句柄”。
  2. 通过这个内存对象(文件句柄),来对文件进行操作(读取,写入等操作)。
  3. 关闭文件

使用python读取一个txt文件的时候,相当于把这个文件从硬盘上,读取到了内存中。我们如果想要操作这个文件,就先要获取这个文件对象(或者叫文件句柄)。这个“文件句柄”包含了文件的文件名、文件的字符集、文件的大小、文件在硬盘上的起始位置等内容,

python读取文件的第一步是用open函数打开文件。open()是python的内置函数,它会返回一个文件对象,这个文件对象拥有read、readline、write、close等方法。

 

 

二、python读写文件常用的几个方法

  • open(“filepath”,“mode”) - 打开文件
  • close() - 关闭文件,并立即释放它使用的所有系统资源
  • read()- 读取文件内容。你可以把读取结果赋给一个变量。
  • readline() - 只读取文本文件的一行内容。
  • readlines()-读取所有行,返回的是所有行组成的一个列表
  • truncate() - 清空文件。清空的时候要当心。
  • write('stuff') - 给文件写入一些“东西”。
  • seek(0) - 把读/写的位置移到文件最开头。

 

2.1 Open("file","mode")函数

参数解释
file:需要打开的文件路径
mode(可选):打开文件的模式,如只读、只写、追加、可读写等,mode参数可以省略不填,默认为r模式

mode常用的模式:

  • r:表示文件只能读取
  • w:表示文件只能写入
  • a:表示打开文件,在原有内容的基础上追加内容,在末尾写入
  • w+:表示可以对文件进行读写双重操作

mode参数还可以指定以什么样的编码方式读写文本,默认情况下open是以文本形式打开文件的,比如上面的四种mode模式。

当你需要以字节(二进制)形式读写文件时,只需要在mode参数中追加'b'即可,如下:

    • rb:以二进制格式打开一个文件,用于只读
    • wb:以二进制格式打开一个文件,用于只写
    • ab:以二进制格式打开一个文件,用于追加
    • wb+:以二进制格式打开一个文件,用于读写

 

文件读写的几种常见模式

 

注意:当我们读取某个文件,向文件中写入某些内容(覆盖写),或者向文件中追加写入某写内容时,最好的方式就是分别使用r、w、a这三种模式。

     对于r+、w+、a+这三种模式,如果你不是特别清楚python文件读写的原理,就不要轻易使用,可能会出现很多意想不到的问题,一般用这三种模式时可能会用到下面2.7里面的seek(0)方法来改变文件指针位置

 

2.2 read()方法

当使用open函数打开文件后,就可以使用该文件对象的各种方法了,read方法就是其中一个。

read()会读取文件一些数据并将其作为字符串(在文本模式下)或字节对象(在二进制模式下)返回。

read方法有一个参数:

f.read(size) # f为文件对象
参数size(可选)为数字,表示从已打开文件中读取的字节计数,默认情况下为读取全部。

假设有一个文件sample1.txt,现在读取该文件:

 
f=open('sample1.txt') #打开文件
content = f.read() #读取文件
print(content) #将读取的字符串打印出来 f.close() #关闭文件

2.3 readline()方法

readline方法从文件中读取整行,包括这一行后的换行符'\n',如果要去掉换行符可以始终strip()方法。

如果 f.readline() 返回一个空的字符串,则表示已经到达了文件末尾,而空行使用 '\n' 表示,该字符串只包含一个换行符。

f.readline()有一个参数:

f.readline(size)

参数size表示从文件读取的字节数。

 

2.4 readlines()方法

readlines方法和readline方法长得像,但功能不一样,前面说过readline方法只读取一行,readlines方法则是读取所有行,返回的是所有行组成的一个列表

 

2.5.read,readline、readlines三者区别

 

 

2.5 write方法

write方法顾名思义,就是将字符串写入到文件里。

它只有一个参数:

f.write([str]) # f为文件对象

参数[str]代表要写入的字符串

 

2.6 truncate方法

truncate()方法用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。 如果没有指定 size,则从当前位置起截断;截断 size 后面的所有字符全被删除

 

2.7 seek() 方法

用于移动文件读取指针到指定位置。

file.seek(offset[, whence])

各个参数的含义如下:

  • file:表示文件对象;
  • whence:作为可选参数,用于指定文件指针要放置的位置,该参数的参数值有 3 个选择:0 代表文件头(默认值)、1 代表当前位置、2 代表文件尾。
  • offset:表示相对于 whence 位置文件指针的偏移量,正数表示向后偏移,负数表示向前偏移。例如,当whence == 0 &&offset == 3(即 seek(3,0) ),表示文件指针移动至距离文件开头处 3 个字符的位置;当whence == 1 &&offset == 5(即 seek(5,1) ),表示文件指针向后移动,移动至距离当前位置 5 个字符处。

 

2.8 close()

文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也是有限的,这个时候就需要用到close()方法来关闭文件

由于文件读写时都有可能产生IOError,一旦出错了,后面的f.close()就不会调用。所以,为了保证无论是否出错都能正确地关闭文件,一般会使用try ... finally来补货异常用来实现文件可正常关闭,如下

 

try:
    f = open(r'c:/path/to/file', 'r')
    print(f.read())
finally:
    if f:
        f.close()

但是每次都这么写实在太繁琐,所以,Python就引入了with语句来自动帮我们调用close()方法,r如下所示:

with open(r'c:/path/to/file', 'r') as f:
    print(f.read())

三、超大文件如何读取(文件大于可用内存)

f=open(r"D:\Gedit_V2.30.1_XiTongZhiJia\sample1.txt","r",encoding="UTF-8")    #打开一个文件并返回一个文件对象,这个文件对象是可迭代的
for line in f:
    print(line.strip())

 

在这里f相当于一个迭代器,我们使用for循环迭代f 中元素。每循环一次,就相当于读取文件的一行到内存中,并记住这一次读取到的位置。当进行下次迭代的时候,上一次读取到内存中的内容,就会被销毁了,当前内存中读取的就是第二行的内容。当进行第三次循环的时候,内存中第二行的内容也会被销毁,此时内存中只会保存第三行的内容,这样依次进行下去。直到最后一次循环,读取最后一行的内容,此时,内存中保留的也只是最后一行的内容。

迭代器有一个特性:每次进行迭代的时候,就会记住当前读取的位置。当进行下一次迭代的时候,前面的内容会被销毁掉,在内存中只会保留当前循环得到的内容

 

posted @ 2021-09-24 16:10  机智的老猫咪  阅读(732)  评论(0编辑  收藏  举报