python中的文件操作

原创 2015年11月17日 22:08:21

注意:以下文件操作适用的python版本为2.7.X,与python3.X有些不同。

文件打开

在python中打开一个文件open(filepath,[mode],[buf])

参数说明:

filepath:  文件路径
mode:     文件的打开方式(只读、只写、可读可写,默认是只读)
buf:         缓冲区的大小,默认为0,表示不缓冲(字节)
Python文件打开方式(mode)可取以下值:
'r' 只读方式打开 文件必须存在
'w' 只写方式打开 文件不存在则创建文件,文件存在则覆盖原来内容
'a' 追加方式打开 文件不存在创建文件
'r+'/'w+' 读写方式打开
'a+' 追加和读写方式打开
'rb','wb','ab',‘rb+','wb+','ab+' 二进制方式打开

例如:

f = open("hello.py",'r',1)

文件读取

read函数读取

read([size]):读取文件
如果设置了 size 而且文件大小大于size,那么读取size个字节,如果未设置size则默认读取全部。
readline([size]):读取一行
readlines([size]):读取文件,返回每一行所组成的列表(如果文件很大,会占用很大内存,一般不推荐使用)
系统不是精确的按照size读取文件,只会读出和io.DEFAULT_BUFFER_SIZE相近的字节数(io.DEFAULT_BUFFER_SIZE是io包中定义的一个常量数值为8k)。
注意(在python2.X中):
1:readlines的参数是字节数,不是行数
2:如果不加参数,默认把文件读完,
3:参数小于io.DEFAULT_BUFFER_SIZE,则读出字节数接近于io.DEFAULT_BUFFER_SIZE(8K的一倍值)
4:如果输入的值大于io.DEFAULT_BUFFER_SIZE,读出字节数接近于io.DEFAULT_BUFFER_SIZE的倍数的字节数。

用迭代器读取文件

iter_f = iter(file)
for line in iter_f:
    count += 1


这样就得到了文件的行数,迭代器不必将文件一次读取到内存中,可以在不使用大量内存的情况下,遍历整个文件。


文件写入

文件写入方式:
write(str):将字符串写入文件
write(sequence_of_strings):写多行到文件
如果文件是用只写或者读写方式打开,新写的内容会覆盖掉文件原来的内容!如果文件要多次打开多次写入而保留原来的内容,就要使用追加的方式打开。调用写函数后,不会立刻序列化到磁盘上,而是先放在内存中的缓冲区中。
当关闭文件close()或者调用flush()以后会写到磁盘上。如果写入的数量过大,大于缓存空间,也会将缓存写入磁盘。


文件关闭

使用完文件以后要调用file.close()关闭文件,释放资源。理由如下:

1.将写缓存同步到磁盘
2.linux系统中每个进程打开的文件个数是有限的
3.如果打开文件数到了系统限制,在打开文件就会失败。会报错。
进程限制的打开文件数可以在 /proc/{进程号}/limits 文件中查看,可以通过file对象的 fileno() 方法来查看当前已经打开了多少文件。


文件指针

初学者在使用python读写文件的时候会发现两个问题:
1.写入文件以后必须重新打开文件才能读到刚才写入的内容
2.读取文件文件以后,读取过的内容不能再次读取
原因是在在文件读写过程中有一个叫做文件指针的东西在移动。当使用 open 函数打开一个文件时,文件指针指向文件的第一个字节。当调用 file.read(3) 后文件指针会向后移动三个字节,指向第四个位置。如果调用file.write('abcde')后文件指针会向后移动5个字节。在文件读写的过程中文件指针是自动根据字节数向后移动的。那么可否自己手动移动文件指针呢?答案是肯定的。
Python中文件指针操作通过seek函数来完成,具体格式为:
seek(offset,[whence])
offset 表示偏移量,可以取负数;
whence 表示偏移的相对位置,这个相对位置有三种取值:os.SEEK_SET(文件起始位置)、os.SEEK_CUR(文件当前位置)、os.SEEK_END(文件结尾位置)
比如,如果想让文件指针移到文件开始出可以这样写:

import os
file.seek(0,os.SEEK_SET)

注意:

1.调用 file.tell() 可以查看当前文件指针的位置(相对于文件开始处)
2.文件指针位置是从0开始的
3.使用seek移动指针时要注意不能越界,否则会报错


文件的编码格式

在用python操作文件时要注意文件编码格式的问题。python中提供了一些方法来查看打开文件的属性:
file.fileno() :文件描述符
file.mode     :文件打开权限
file.encoding :文件编码格式(默认的文件ascii码格式,不返回任何值)
file.closed   :文件是否被关闭(值为true或false)

f 的其它方法:

调用 write 函数向文件写入内容时,写的字符串的编码要和文件的编码相符合,如果不符合会写入失败。
比如问件 f 是ascii码格式,调用 f.write(u'中国') 会报错:ascii不支持unicode格式的写入。那么如何将 u'中国' 写入文件呢?可以将unicode转码成'utf-8'然后再写入!

a = unicode.encode(u'中国','utf-8')
f.write(a)


我们可以用codecs模块提供的方法来创建一个我们自己想要的编码格式的文件。
codecs.open(fpath,mode,encoding,errors,buffering) 可以通过encoding参数设置以何种编码方式打开文件(默认为ascii编码)


os模块的使用

(首先要 import os)

使用os模块打开文件

os.open(filename,flag,[mode])
flag表示打开文件的方式,可以取值:
os.O_CREAT 创建文件
os.O_RDONLY 只读方式打开
os.O_WRONLY 只写方式打开
os.O_RDWR 读写方式打开
flag可以接收多个值的复合,比如以创建和读写的方式打开一个文件:
fd = os.open('test.txt',os.O_CREAT | os.O_RDWR)

os的其它方法:




使用os模块对文件进行操作

os.read(fd,buffersize) 读取文件
os.write(fd,string) 写入文件
os.lseek(fd,pos,how) 文件指针操作,第一个参数表示文件对象,第二个参数是偏移量,第三个参数是相对位置,第三个参数的取值同seek函数一样.(SEEK_SET/os.SEEK_CUR/os.SEEK_END)
os.close(fd):关闭文件

os.path 的常用方法:


版权声明:本文为博主原创文章,欢迎转载和交流,转载请注明来源^^

Python文件操作学习总结

Python读写文件 1.open 使用open打开文件后一定要记得调用文件对象的close()方法。比如可以用try/finally语句来确保最后能关闭文件。 file_obj...
  • bcbobo21cn
  • bcbobo21cn
  • 2016年12月13日 09:49
  • 999

Python基本文件操作

Python-文件相关操作open()open(filename, mode) 返回一个文件对象fileobjectf = open(filename, 'r') f.close()filename ...
  • charles_neil
  • charles_neil
  • 2017年08月10日 12:50
  • 156

python 文件操作、数据库读写、爬虫功能块 记录

应实验室的要求,学习了python,没有很系统的去学,但是常用的一些功能块还是在这记录一下,方便以后使用。 文件操作 # coding=utf-8 import os import os.pa...
  • MakeContral
  • MakeContral
  • 2018年01月11日 16:08
  • 117

python文件操作 API整理

这里很详细,基本都有了,接下来遇到的我再更新
  • sinat_36458870
  • sinat_36458870
  • 2017年06月22日 19:05
  • 190

轻松python之文件专题-关于行的操作

1.计算文本行数 最常用的就是readlines >>> handler=open('input_file.txt') >>> lines=handler.readlines () >>> len...
  • raylee2007
  • raylee2007
  • 2015年09月02日 10:13
  • 2008

python 文件读写5个实例

python readlines() writelines() 文件读写
  • sxingming
  • sxingming
  • 2016年05月07日 16:43
  • 1405

Python+Django+SAE系列教程4-----操作文件

Python+Django+SAE系列教程4-----操作文件
  • hemeng
  • hemeng
  • 2014年04月15日 09:59
  • 1781

Python--小甲鱼学习笔记--第28课:文件(文件打开方式、文件对象方法)

1.open()函数定义:open(file, mode=’r’,buffering=1,encoding=None, errors=None, newline=None, closefd=True,...
  • xxn_723911
  • xxn_723911
  • 2017年12月21日 22:21
  • 45

Python文件操作详解

打开和关闭文件 open 函数 你必须先用Python内置的open()函数打开一个文件,创建一个file对象,相关的方法才可以调用它进行读写。 语法: file object = ope...
  • zengxiantao1994
  • zengxiantao1994
  • 2016年12月21日 15:02
  • 328

Python 中的文件操作

python中对于数据输入输出的处理和常规性语言类似。主要包括:系统输入输出、文件存储、数据库存储等,其中数据存储读取操作中主要就是对于文件和数据库的处理方面。python中对于文件的处理提供了一个比...
  • chf1142152101
  • chf1142152101
  • 2017年12月28日 16:40
  • 30
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python中的文件操作
举报原因:
原因补充:

(最多只允许输入30个字)