python文件操作

本篇内容有参考到廖雪峰的python教程点击进入廖大神的教程

python中打开文件的操作是使用内置的open()函数:
语法:
open(路径+文件名, 读写模式)
读写模式:r只读,r+读写,w(先删除原文件,再重新写入。如果文件不存在则创建文件),w+(先删除原文件,再重新写入。如果文件不存在则创建文件。可以写入与读取),a追加写入(在文件末尾追加新内容。如果文件不存在则创建),a+读写,b二进制文件。
常用:rb以二进制格式打开文件用于只读,wb以二进制格式打开文件用于写入,rb+以二进制格式打开文件用于读写,wb+以二进制格式打开文件用于读写,如果文件已存在会将原文件覆盖。


读文件:从文件对象中读取数据
    首先以读文件的模式'r'或'rb'等打开一个文件对象,文件不存在会抛出IOError错误。
    调用read()方法一次读取文件全部内容读到内存。
    调用close()关闭文件(为了释放占用的操作系统资源)
打开普通文本文件:

file1=open('/test/hello.txt','r') #打开文件

打开二进制文件如图片、视频文件等
file1=open('/test/huoying.jpg','rb')

file1=open("双城记.txt","r")
str1=file1.read()
print str1
print"读二进制文件"
file2=open("a.jpg","rb")
str2=file2.read()
print str2
file1.close()
file2.close()

注意1在文件读取的过程中有可能会产生IOError,那么此时就不会执行到后面的close(),那么就无法释放操作系统资源,因此为了能够在任何状况下都能保证正常关闭文件而释放资源,可以使用try...finally和with语句(with语句能够自动调用close()方法)

#eg1:
try:
    file1=open('/test/hello.txt','r')
    ......
finally:
    if file1:
    file1.close()

#eg2
with open('test/hello.txt','r') as file1:
    ......

注意2:read()方法是一次性读取文件全部内容,但是文件内容如果非常巨大,一次性读取就会对内存造成不良影响,可以通过传入一个参数read(size),限定每次读取size字节的内容,然后再反复调用read(size),直到读取结束。
另外也可以调用readline()每次读取一行内容,并以list列表形式返回该行内容。

for line in file1.readline():
     print(line.strip()) #去掉末尾的'\n'

字符编码:
要改变默认的编码,就需要给open()函数一个encoding参数:

file1=open('/test/hello.txt','r',encoding='gbk')

当因为文本文件夹杂了一些非法编码的字符而导致遇到UnicodeDecodeError错误信息时,可以给open传入一个errors参数,参数值可以为ignore表示直接忽略错误。

file1=open('/test/hello.txt','r',encoding='utf-8',errors='ignore')

写文件:把数据写入到文件对象
     首先以写文件的模式'w'(写文本文件)或'wb'(写二进制文件)打开一个文件对象。
     调用write()方法将内容写入文件。write()方法不会在字符串的结尾添加换行符('\n'):
     调用close()关闭文件(为了释放占用的操作系统资源)
打开普通文本文件:

file1=open('/test/hello.txt','w') #打开文件

打开二进制文件如图片、视频文件等

file1=open('/test/huoying.jpg','wb')

注意:当我们写文件时,操作系统不会立刻将数据写入磁盘,而是放到内存缓存起来等到空闲时才写,只有调用close()方法时,操作系统才保证数据全部写入磁盘,因此没有close()可能造成数据的部分丢失。因此写文件必须要有file1.close()

(同样有相应的参数encoding、errors)

file1=open("看不见的城市.txt","a")
#file1=open("一本书.txt","w")
content=raw_input("请输入您要追加的内容:")
file1.write("\n"+content)
file1.flush()
file1.close()

读写结合:

#操作文本文件:
file1=open("双城记.txt","r")
str1=file1.read()
fn1=raw_input("输入要创建的文件名:")
fo=open(fn1,"w")
fo.write(str1)
fo.close()
file1.close()
#操作二进制文件:
file1=open("a.jpg","rb")
str1=file1.read()
fn1=raw_input("输入要创建的文件名:")
fo=open(fn1,"wb")
fo.write(str1)
fo.close()
file1.close()

文件的属性:

file.name            返回文件的名称

file.mode            返回被打开文件的访问模式

file.closed           文件若关闭则返回true

file.encoding      文件使用的编码方式

file.softspace        为0表示在输出一数据后,要加上一个空格符,1表示不加。

file.newlines   没有读取到行分隔符时为None,只有一种分隔符时返回字符串,有多种类型行分隔符时,返回包含所有行分隔符的列表

文件的一些常用方法:

file.close()                  关闭文件

file.next()                   返回当前行,并将文件指针指向下一行
                                 
(超出内容会给一个停止迭代的反馈)

file.read([size])          从文件每次读取size个字节,无参或参数为负则一次性读取全部

file.readline([size])     一次读取一行,以列表形式返回,包括'\n',
                                  size:指定每行每次读取size个字节,直到行的末尾。
                                 
(超出内容会返回空字符串)

file.readlines([size])   读取所有行,以列表形式返回,每行的内容作为列表的一个元素

file.write(str)              将字符串写入文件

file.writelines(list)      向文件写入一个字符串列表,如需换行需要自己添加换行符

file.truncate([size])    截取size字节大小的文件

file.isatty()                 如果文件连接到一个终端设备返回true

file.fileno()                 返回一个整型的文件描述符

file.flush()                  刷新文件内部缓冲,即把缓冲区的数据立刻写入文件,
                                  不用等待输出缓冲区写入。

file.tell()                     返回文件当前位置(读取或写入到哪个位置...)

file.seek(offest [,whence])  设置文件当前位置,offest为偏移量,whence为选项
                         选项=0:表示将文件指针指向从文件头部到偏移量的字节数
                         选项=1:表示将文件指针指向从当前位置移动偏移量的字节数

                         选项=2:表示将文件指针指向从文件尾部向前移偏移量字节数


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值