Python自学笔记---13.文件和文件对象

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/DataCow/article/details/82120753

文件和文件对象

我在学习Linux的文件时,总结了一个规律。面对一个文件时,要操作这个文件首先就要打开这个文件,然后对其进行读写。当然这个读写的方式却有很多。Python内置了读写文件的函数,用法和C是兼容的。

1.打开文件的常规操作

在Python内置的函数open用于打开和创建文件对象,如下所示:

fd = open("path")    #打开文件"path",path也可以是某个文件的绝对路径
fd = open("path", 'r')    #以读方式打开文件"path"
fd = open("path", 'w')    #以写方式打开文件"path"

2.使用open函数的扩展

上述例子只讲了以文本模式打开或者创建一个文件,那么我们在实际开发中如果遇到这样或者那样的情况,下面我们分小节讲述。

2.1 二进制数据

如果正在处理二进制数据,可以将’b’附加到文件模式后面,这样做的后果是,将会禁用换行符转换

fd = open("path", 'rb')
fd = open("path", 'wb')

#为了便于区别文本模式和二进制模式通常也会加上't'来区别,以便于更清楚的表达意图

fd = open("path", 'rt')
fd = open("path", 'wt')

2.2 文件的追加

我们在操作文件,特别是打印log的时候使用最多的就是追加,你试想一下,每次写log文件你如果都把文件清除了,那么你这log打印的还有什么意义呢?所以文件追加是一种特别有用的方法。

fd = open("path", 'ra')
fd = open("path", 'wa')

2.3 w+、r+、a+用法的区分

r+为可读写两种操作 w+为可读写两种操作(会首先自动清空文件内容) a+为追加读写两种操作
【注意以上三种操作方式均不可同时进行读写操作】
以上述’w+’为例

path = 'G:/Python/boke/test1.txt'  #该文件中已经存有汉字若干

fd = open(path,'w+',encoding='UTF-8')
fd.writelines('sdssdsd')

fd.close()
fd = open(path,'r+',encoding='UTF-8')

for line in fd:
    print(line) #本行代码判断是否会改变文件内容
fd.close()
模式 可做操作 若文件不存在 是否覆盖
r 以只读方式打开文件。文件的指针将会放在文件的开头 报错
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头 报错
r+ 打开一个文件用于读写。文件指针将会放在文件的开头 报错
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头 报错
w 只能写 创建
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件在文件的开头 创建
w+ 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件 创建
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 创建
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入 创建 否,追加写
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入 创建 否,追加写
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写 创建 否,追加写
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 创建 否,追加写

2.4 关于换行符的处理

如果linux上编写的脚本必须处理由windows程序生成的文本文件,而他们一个有可能生成的换行符包含(‘\n’, ‘\r’ 和’\r\n’),要处理这些文件时python还提供了一种功能’U’和’rU’

#该功能可将不同的换行符编码('\n', '\r' 和'\r\n')转换为标准的'\n'字符,从而简化跨平台工作
fd = open("path", 'U')
fd = open("path", 'rU')

文件方法

方法 描述
f.read([n]) 最多读取n个字节
f.readline([n]) 读取单行输入的最多n个字符。如果省略了n,该方法将读取整行
f.readlines([size]) 读取所有行并返回一个列表,size是可选的,用于指定在读取操作停止前在文件上读取的近似字符数
f.write(s) 写入字符串s
f.writelines(lines) 写入序列lines中的所有字符串
f.close() 关闭文件
f.tell() 返回文件当前指针
f.seek(offset [,whence]) 查找新文件位置
f.isatty() 如果f是个交互式终端,则返回1
f.flush() 清除输出缓冲区
f.truncate([size]) 将文件截断为最多size字节
f.fileno() 返回一个整数文件描述符,如果关闭就发出valueError异常
f.__next__() 返回下一行或引发StopIteration.在python2.7中对应的方法为f.next()

总结

  • 本小节对python下的文件与文件对象有了一个初步的认识,其是python内置的函数继承了C语言标准库中对文件操作的一些函数,当然其中还是多少做了些改进的,但是你依照C语言的用法也是行的通的
  • 关于文件操作函数以及方法的详细介绍将在后续章节陆续开展
  • 这段时间主要就是学习python中的文件操作以及复习linux下的文件操作,并理出两者的不同的和相通的地方

猜你喜欢

转载自blog.csdn.net/DataCow/article/details/82120753
今日推荐