龙空技术网

python3应用准备知识二:文件的操作

爱编程的二大爷 166

前言:

此时姐妹们对“python3操作文件”都比较关切,你们都需要学习一些“python3操作文件”的相关内容。那么小编同时在网络上搜集了一些对于“python3操作文件””的相关内容,希望看官们能喜欢,姐妹们一起来学习一下吧!

我们在用程序做各种应用的时候都离不开文件的操作,可以是数据提取,文件存档,也可以是文件生成。在python3中文件有很多文件读写的方法,今天我就来给您介绍一下吧。

首先我们知道文件的读写都是由操作系统提供的,操作系统一般不允许普通的程序直接操作磁盘,所以,读写文件就是请求操作系统打开一个文件对象,然后,通过操作系统提供的接口从这个文件对象中读取数据,或者把数据写入这个文件对象中。

这里我们先建立一个test.txt的纯文本文件作为我们操作的文件对象,并且在文件中输入几行文字:

Carrie Underwood - See You Again

Said goodbye, turned around

And you were gone, gone, gone

Faded into the setting sun

然后我们打开命令提示行符进入text.txt的目录,进入python3输入如下代码:

>>> f = open('test.txt','r')

我们就成功的打开了这个文件,我们没在test.txt的目录也可以,只要写出test.txt完整的路径即可,我的文件是放在\study\test.txt,如果我的命令提示行在其他的目录我们可以直接用这种方式打开>>> f= open('\\study\\test.txt','r')注意双斜杠的写法如果仅仅是单斜杠会报错。

如果成功打开,那么就可以用read()方法来读文件内容了

>>> f.read()

'Carrie Underwood - See You Again\n\nSaid goodbye, turned around\n\nAnd you were gone, gone, gone\n\nFaded into the setting sun\n\n?'

可以看到文件所有的内容都被编辑到了一个字符串当中,并且换行用\n代替

然后我们要记得使用f.close()方法来关闭文件,因为每次我们打开一个文件时文件都会从磁盘写入内存,如果我们不使用close方法,文件的内存块将一直存在,并且操作系统打开文文件的数量是有限的。

close方法运行后,我们直接输入f发现f任然是test.txt的文件对象,但是我们再输入f.read()时就会报错了

>>> f

<_io.TextIOWrapper name='test.txt' mode='r' encoding='cp936'>

>>> f.read()

Traceback (most recent call last):

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

ValueError: I/O operation on closed file.

我们经常在调用文件的时候会碰到OSError等文件系统错误

因此我们可以运用以前的知识错误处理来处理这种错误

try:

f = open('/path/to/file', 'r')

print(f.read())

finally:

if f:

f.close()

意思是如果open碰到了错误后直接执行判断语句看看是否文件只打开了部分便遇到错误,如果是则关闭这个对象,如果不是则退出。

但是几乎每次文件都这么写比较繁琐,因此python引入了关键字‘with’

with open('/path/to/file', 'r') as f:

print(f.read())

这个两句等效于上面的语句,with语句可以捕捉错误,如果一旦捕捉到了错误用as关键字来判断f有则释放无则跳出with语句块范围

read()方法有一个问题就是一次性将文件内容都调用出来了,如果文件过于大了很容易造成内存溢出,因此有read(size),也就是打开大小,或者readline()方法,只读取一行还有redlines()方法是将文件每一行作为一个list读出

>>> f.readline()

'Carrie Underwood - See You Again\n'

>>> f.read(2)

'\nS'

这里注意,我们第二次使用read(2)意思是取两个字符,\n算是一个字符,S也是,取字符的地方在我先读出了一行之后,也就是说他是接着readline()之后继续读出文件内容。

前面讲的默认都是读取文本文件,并且是UTF-8编码的文本文件。要读取二进制文件,比如图片、视频等等,用'rb'模式打开文件即可

如果我们要写文件,也是用open函数打开的表示符用w即可

然后我们调用write()方法

>>> f = open('test.txt','w')

>>> f.write('python')

6

>>> f.read()

>>> f = open('test.txt','r')

>>> f.read()

'python'

这里要注意的是,1、这种写法会删除以前文件中的内容,2、每次写完成后python会返回写入数量,3、在写入打开方法时。read()方法不能使用,反之亦然。

同样我们也可以用with as关键字来保证写入正常。

除了文件内存中的也可以进行读写,这里我们要引入一个模块StringIO

>>> from io import StringIO

>>> f = StringIO()

>>> f.write('hello')

5

>>> f.write(' ')

1

>>> f.write('world!')

6

>>> print(f.getvalue())

hello world!

getvalue()方法用于获得写入后的str。

要读取StringIO,可以用一个str初始化StringIO,然后,像读文件一样读取:

>>> from io import StringIO

>>> f = StringIO('Hello!\nHi!\nGoodbye!')

>>> while True:

... s = f.readline()

... if s == '':

... break

... print(s.strip())

...

Hello!

Hi!

Goodbye!

这个和文件的读取写入类似

今天的文件及内存的读写操作您学会吗?如果有问题您可以给我留言。

标签: #python3操作文件