python文件操作总结

文件操作总结

目录

文件操作总结

文件操作模式

文件打开操作

open()函数

with方式打开文件:会默认关闭文件

文件读写操作

fileObject.read([size])

fileObject.readline([size])

fileObject.readlines([size])

fileObject.write(str)

fileObject.writelines(seq)

fileObject.close()

fileObject.flush()

文件其余操作

fileObject.closed

fileObject.name

fileObject.mode

fileObject.next()

fileObject.fileno()

fileObject.isatty()

fileObject.truncate([size])

文件游标:

fileObject.tell():

fileObject.seek(offset,whence)

文件操作扩展


文件操作模式

模式

描述

r

以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式

r+

打开一个文件用于读写,文件指针将会放在文件的开头

rb

以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头

rb+

以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头

w

打开一个文件只用于写入。如果该文件已存在则将其覆盖;如果该文件不存在,则创建该文件

w+

打开一个文件用于读写。如果该文件已存在则将其覆盖;如果该文件不存在,则创建该文件

wb

以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖;如果该文件不存在,则创建该文件

wb+

以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖;如果该文件不存在,则创建该文件

a

打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。新的内容将会被写入到已有内容之后,如果该文件不存在,创建该文件进行写入。

a+

打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式,如果该文件不存在,创建该文件进行写入。

ab

以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。新的内容将会被写入到已有内容之后,如果该文件不存在,创建该文件进行写入。

ab+

以二进制格式打开一个文件用于追加读写。如果该文件已存在,文件指针将会放在文件的结尾。新的内容将会被写入到已有内容之后,如果该文件不存在,创建该文件进行写入。

文件打开操作

open()函数

用来打开一个文件,创建一个file对象,然后就可以对该打开的文件做任何想做的操作;

常用格式为:

file_object=open(file_name,access_model,encoding)

参数说明:

file_name:要访问的文件名称的字符串值;

access_model:文件操作模式,参照上表;默认文件模式为只读r;

encoding:编码或者解码方式

#代码示例

fp=open("test.txt")

content=fp.read()

fp.close()       #close()关闭要与open()一定要同时使用

print (content)

with方式打开文件:会默认关闭文件

原理:内部会先执行__enter__方法,执行完毕后再执行__exit__方法

#代码示例

with open("test.txt","r") as fp:

    for line in fp:

        print (line)

文件读写操作

fileObject.read([size])

size 为读取的长度,以byte为单位,如果不指定参数,表示一次性读取全部内容,以字符串形式返回,并且每一行结尾会有一个"\n"符号。

代码示例:

>>> fp=open("test.txt")

>>> fp.read()

'hello world!\ngloryroad\n每天进步一点点'

>>> fp.close()

>>> fp=open("test.txt")

>>> fp.read(5)

'hello'

>>> fp.close()

fileObject.readline([size])

读取一行,如果给定了size,有可能返回的只是一行的一部分,以字符串的形式返回,并且结尾会有一个换行符"\n"。文件操作标记移动到下一行的开头

代码示例:

>>> fp=open("test.txt")

>>> fp.readline()

'hello world!\n'

>>> fp.readline()

'gloryroad\n'

>>> fp.close()


>>> fp=open("test.txt")

>>> fp.readline(5)

'hello'

>>> fp.readline(5)

' worl'

>>> fp.readline(5)

'd!\n'

>>> fp.close()

fileObject.readlines([size])

把文件每一行作为一个list的成员,是一个字符串,并且结尾会有一个换行符"\n",并返回一个list。如果指定了size参数,表示读取文件指定内容的长度,此时就有可能只能读取文件的一部分,并且结尾会有一个换行符"\n"

代码示例:

>>> fp=open("test.txt")

>>> fp.readlines()

['hello world!\n', 'gloryroad\n', '每天进步一点点']

>>> fp.close()


>>> fp=open("test.txt")

>>> fp.readlines(4)

['hello world!\n']

>>> fp.readlines(4)

['gloryroad\n']

>>> fp.readlines(1)

['每天进步一点点']

>>> fp.readlines(1)

[]

>>> fp.close()

fileObject.write(str)

把str写到文件中,默认是不加换行符的,所以如果想换行的话,需要手动加入换行符"\n"

代码示例:

>>> fp=open("test.txt","w")     #w模式将原来的内容覆盖

>>> fp.write("reapal.test")

11

>>> fp.close()



>>> with open("c.txt","w") as file:         

...     file.write("文件测试写入成功!")

...

9

>>> with open("c.txt") as file:

...     file.readlines()

...

['文件测试写入成功!']

fileObject.writelines(seq)

把seq(序列)的内容全部写到文件中(多行一次性写入)。也不会自动加入换行符

代码示例:

testList=["五十六个民族\n","五十六支花\n","五十六个兄弟姐妹\n","是一家!"]

with open("a.txt","w") as file:

file.writelines(testList)

**注意:序列中的内容必须为字符串类型的数据,才能成功写入文件!

#造数据

with open("a.txt","w") as file:

    file.writelines(list(map(lambda x:str(x)+"\n",range(101))))

fileObject.close()

file对象的close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。当一个文件对象的引用被重新指定给另一个文件时,python会关闭之前的文件。用close()方法关闭文件是一个很好的习惯。如果文件关闭后,还对文件进行操作会产生ValueError错误;但如果不及时关闭文件,有可能产生句柄泄露,丢失数据

fileObject.flush()

是将缓冲区中的内容写入硬盘。

文件其余操作

fileObject.closed

如果文件已关闭,返回True;否则返回False

fileObject.name

返回文件的名称

fileObject.mode

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

代码示例:

>>> fp=open("test.txt","r")

>>> fp.closed

False

>>> fp.name

'test.txt'

>>> fp.mode

'r'

>>> fp.close()

>>> fp.closed

True

fileObject.next()

返回下一行,并将文件操作标记位移到下一行。把一个file用for...in line这样的循环遍历语句时,就是调用next()函数来实现

*在py2中适用,在py3中废弃了

Py2中代码示例:

>>> fp=open("test.txt")

>>> fp.next()

'reapal.test'

>>> fp.next()

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

StopIteration

>>> fp.close()

Py3中应用报异常:

>>> fp=open("zhigang.py","rb")

>>> fp.next()

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

AttributeError: '_io.BufferedReader' object has no attribute 'next'

fileObject.fileno()

返回一个长整型的文件标签,不常用

代码示例:

>>> fp=open("test.txt")

>>> fp.fileno()

3

>>> fp.close()

fileObject.isatty()

文件是否是一个终端设备文件(linux服务器)

>>> fp=open("zhigang.py")

>>> fp.isatty()  

False

>>> fp.close()

fileObject.truncate([size])

把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。如果size比文件的大小还要大,依据系统的不同可能是不改变文件,也可能是用0把文件补到相应的大小,也可能是以一些随机的内容加上去;

>>> with open("gang.txt","r+") as fp:

...     fp.truncate(10)

...

10

文件游标:

文件打开的时候,r或者w都是默认文件0的位置

fileObject.tell():

查看文件游标所处的当前位置,回车也会占用一个位置

代码示例:

with open("gang.txt","r",encoding="utf-8") as fp:

    print (fp.tell())

    print (fp.readline())   #执行此语句后,文件位置会发生变化

    print (fp.tell())


with open("gang.txt","r",encoding="utf-8") as fp:

    print (fp.tell())

    print (fp.readline())

    fp.seek(0,0)            #恢复到初始位置

    print (fp.tell())

fileObject.seek(offset,whence)

参数说明:

offset:相对于whence的偏移量,字节数,可以为负数,whence省略时,默认从文件开头算起;正数表示从前向后,负数表示从后向前

whence:给offset参数的偏移参考,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起

注意:使用需使用b模式打开文件,否则只允许从文件头开始计算相对位置,从文件当前位置或文件末尾位置计算时就会引发异常

>>> fp.seek(-1,2)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

io.UnsupportedOperation: can't do nonzero end-relative seeks


>>> fp=open("test.txt","rb")

>>> fp.tell()        #默认从0位置开始

0

>>> fp.seek(5,1)     #从当前位置往后移5位

5

>>> fp.tell()

5

>>> fp.seek(-5,1)    #从当前位置往前移5位

0

>>> fp.seek(0,2)     #移动到文件末尾位置

19

>>> fp.read()        #末尾位置开始读取内容,返回为空

b''

>>> fp.close()

文件操作扩展

import linecache


#将文件所有行以列表的形式返回

file_content=linecache.getlines("gang.txt")

print (file_content)


#截取文件内容的一部分

file_content=linecache.getlines("gang.txt")[4:15]

print (file_content)


#返回指定行数的内容

file_content=linecache.getline("gang.txt",13)

print (file_content)


#文件发生改动,需要获取最新的文件内容时

file_content=linecache.updatecache("gang.txt")

print (file_content)

#更新缓存

linecache.checkcache("gang.txt")

#清理缓存

linecache.clearcache()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值