python文件处理

一、python文件操作基础


文件:python中文件是对象。

文件属性:用户、读、写、执行权限。


1、文件的打开方式

文件打开方法:

open(name,mode,buf)

name:文件路径

mode:打开方式

buf:设置读写文件缓冲大小

f=open("hello.txt")
print dir(f)

可以看到文件类的方法如下:

python文件处理_第1张图片


下面来看看文件的具体打开方式:

python文件处理_第2张图片

如果以普通方式打开,则是以文本的方式打开,读取的时候不能读取到正确内容,而用二进制方式打开就可以根据某些信息(比如图片的头信息)得到正确内容。


2、文件的读取方式

python读取文件方式:

<span style="font-family:Microsoft YaHei;font-size:14px;">read(size)#读取文件,读取size个字节,默认读取全部 如果没有设置 则全部读完
readline(size)#读取一行前size个字节,如果不设置则读取一行,就只读取一行
readlines()#读缓冲buffer左右个字节,返回每一行所组成的列表</span>

<span style="font-family:Microsoft YaHei;font-size:14px;">f=open("hello.txt")
print f.read()</span>
就可以显示出文件中的内容。


那么对于最后一个这个buffer是多少呢,help(f.readlines)一下:


<span style="font-family:Microsoft YaHei;font-size:14px;">import io
print io.DEFAULT_BUFFER_SIZE</span>

显示的结果是8192,也就是每次就读取与这个缓冲大小想接近的字节数,与设置的size大小无关。

<span style="font-family:Microsoft YaHei;font-size:14px;">f=open("hello.txt")
print f.readline()
print f.readline(2)
</span>



那有没有办法将文件全部读完呢?有:

iter:使用迭代器读取文件

<span style="font-family:Microsoft YaHei;font-size:14px;">f=open("hello.txt")
iter_f=iter(f)
lines=0
for line in iter_f:
    lines+=1
print lines</span>
上面代码显示出文件中的总行数。

3、文件的写入方式

write(str)#将字符串写入到文件

writelines(sequences_of_strings)#写多行到文件,参数可为迭代的对象:可以是字符串,也可以是字符串组成的元组,也可以是字符串组成的迭代器或字符串组成的列表

<span style="font-family:Microsoft YaHei;font-size:14px;">f=open('testwrite.txt','w')

f.write('test1')
f.writelines('test2')
f.writelines(('1','2','3'))
f.writelines(['1','2','3'])

f.close()
</span>


要注意的是:

1)、主动调用close()或者flush()方法,写缓存同步到磁盘。

2)、写入数据量大于或者等于写缓存,写缓存会自动同步到磁盘。


4、文件指针

python写入和读入问题:

1)写入文件后,必须打开才能读取写入内容。

2)读取文件后,无法再次读取读过的内容。

文件指针的移动过程:

python文件处理_第3张图片

可见文件指针是无法回朔的,那么如何操作文件指针呢?

文件指针操作函数:

<span style="font-family:Microsoft YaHei;font-size:14px;">seek(offset,whence)</span>
offset:偏移量,可以为负数

whence:偏移相对位置,有下面三种:

os.SEEK_SET:相对文件起始位置,值为0

os.SEEK_CUR:相对文件当前位置,值为1

os.SEEK_END:相对文件结尾位置,值为2


<span style="font-family:Microsoft YaHei;font-size:14px;">f=open('hello.txt','r')
import os
print f.tell()
print f.read(3)
print f.tell()
f.seek(0,os.SEEK_SET)
print f.tell()
f.seek(0,os.SEEK_END)
print f.tell()
f.seek(-5,os.SEEK_CUR)
print f.tell()
print f.read()
print f.tell()
f.seek(0,os.SEEK_END)
f.seek(-67,os.SEEK_CUR)
</span>


python文件处理_第4张图片

可见,文件的偏移量不能超过文件长度,否则会报错。



你可能感兴趣的:(python文件处理)