python学习8 文件的操作

本文拷贝了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:移动的总距离,可以是正数,可以为负数
上一篇:MFC中 SDI/MDI框架各部分指针获取方式


下一篇:使用SharpPCap在C#下进行网络抓包