本文拷贝了on testing 的《python之文件操作:文件的读写》,只做学习之用
python的文件读写通过
一、用open函数
二、对文件读写操作
三、读取文件位置定位
1. open函数open(file_name[,access_mode][,buffering])
(1)参数说明
open(file_name[,access_mode][,buffering]) 打开文件,获得文件的句柄
file_name:包含文件路径的字符串,可以是绝对路径也可以是相对路径,尽量使用绝对路径
access_mode:打开文件的方式:r--只读(默认) w--写之前清空 a--在原来的内容后写,都是针对字符串
buffering:先写到缓存中,一般省略
(2) 返回值
该语句表示返回的是一个指向文件的指针,文件句柄。当以只读模式打开一个不存在文件时则会报错,
当以写或者追加模式打开一个不存在的文件时,则创建该文件,若文件路径中有目录不存在,则报错
(3)实例
f = open(‘d:/i_love_xu.txt‘,w)
2.mode文件操作模式
r,w,a
r+可读可写
w+:打开一个文件用于读写。如果该文件已经存在则将其覆盖。如果该文件不存在,创建新文件
a+:打开一个文件用于读写,如果该文件已经存在,则文件的指针将会放于末尾。文件以追加的模式加在后面,不存在,则创建新文件
rb,wb,ab则用于读取非字符串类型的文件,用二进制形式进行
3.open语句可以对文件进行的其他操作
(1) fp.closed()----判读文件是否关闭,返回True则为关闭
(2)fp.mode----输出读写模式,返回打开文件的访问模式
(3) fp.name --- 返回文件名称
(4)fp.close()----清空内存
(5)----next() 用来读写多个文件的,把文件名放在一个文件中
# for i in fp:
# print i
把一个file用for...in file这样的循环遍历语句时,就是调用next()函数来实现。
文件句柄是一个迭代器???
fp=open(fileName,‘r‘)
print fp.next()
print fp.next()
print fp.fileno() 判断当前操作的文件句柄是哪一个number
fp.close()
二、对文件作读写操作
1、常规的读写操作
(1)read([size])
size:读取的长度,以byte为单位。如果不指定参数,表示一次性读取全部内容,以字符串形式返回,并且每一行结尾会有一个"\n"符号。
(2)、readline([size])
调一次读取一行,如果给定了size,有可能返回的只是一行的一部分,以字符串的形式返回,并且结尾会有一个换行符"\n"。读完一行,文件操作标记移动到下一行的开头。
返回的是字符串
(3)、readlines([size])
(3.1)参数
size:指定很小的数字,会不生效,python 默认8k缓存区大小,需要大于8k生效
读取文件的全部内容,这个函数的内部是通过循环调用readline()来实现的
(3.2)返回值
返回的是列表格式,每一行是列表的一个元素,并且结尾会有一个换行符"\n"
(4)、writelines(seq)
seq:把seq(序列)的内容全部写到文件中(多行一次性写入)。也不会自动加入换行符。
注意:序列中的内容也必须是字符串类型的数据,才能成功写入文件。
(5)、write(str)
把str写到文件中,默认是不加换行符的,所以如果想换行的话,得手动加入换行符‘\n‘。
2、使用linecache模块读取文件
import linecache
允许从任何文件里得到任何的行,并且使用缓存进行优化,常见的情况是从单个文件读取多行。
(1)linecache.getlines(filename,lineno)
从名为 filename 的文件中得到第 lineno 行。
这个函数从不会抛出一个异常–产生错误时它将返回”(换行符将包含在找到的行里)。
如果文件没有找到,这个函数将会在 sys.path 搜索。
(2)linecache.getlines(filename) 返回列表
从名为 filename 的文件中得到全部内容,输出为列表格式,以文件每行为列表中的一个元素,并以 linenum-1 为元素在列表中的位置存储
(3)linecache.clearcache()
清除缓存,如果你不再需要先前从 getline() 中得到的行
(4)linecache.checkcache([filename])
检查缓存的有效性。如果在缓存中的文件在硬盘上发生了变化,并且你需要更新版本,使用这个函数。
如果省略 filename,将检查缓存里的所有条目。
(5)linecache.updatecache(filename)
更新文件名为 filename 的缓存。如果 filename 文件更新了,使用这个函数可以更新
linecache.getlines(filename)返回的列表。
另:读取文件之后你不需要使用文件的缓存时需要在最后清理一下缓存,使linecache.clearcache()清理缓存,释放缓存。
这个模块是使用内存来缓存你的文件内容,所以需要耗费内存,打开文件的大小和打开速度和你的内存大小有关系。
打印奇数行的文件:
fp=‘e:\\tmp\\05.txt‘
list1=linecache.getlines(fp)
for i in list1[::2]:
print i
三、读取文件的位置定位
1、tell()
返回当前操作文件读取到的位置
一个中文:3个字节
Windows下‘\r\n’(换行符)占两个字节,Linux下\n mac下\r.
2、seek(offset[,from]) 移动游标到想去的位置
from:,默认是0,2:从末尾开始计算偏移;1:从当前位置作为标准位置
offset:移动的总距离,可以是正数,可以为负数
三、读取文件的位置定位
1、tell()
返回当前操作文件读取到的位置
一个中文:3个字节
Windows下‘\r\n’(换行符)占两个字节,Linux下\n mac下\r.
2、seek(offset[,from]) 移动游标到想去的位置
from:,默认是0,2:从末尾开始计算偏移;1:从当前位置作为标准位置
offset:移动的总距离,可以是正数,可以为负数
原文地址:https://www.cnblogs.com/benbenxiaofeifei/p/9352227.html