前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python文件处理入门篇

Python文件处理入门篇

作者头像
stormwen
发布2019-08-05 11:06:02
4380
发布2019-08-05 11:06:02
举报
文章被收录于专栏:公众号:googpy

昨天分享了一个关于文件搜索的小实战项目,其实文件处理是Python里面非常重要的一块内容,知识点很多,Python对本地文件的处理,主要是通过文件的读和写来完成的。

Python的文件处理过程概括为以下几点:

(1)文件的读写和关闭

(2)文件的模式

(3)文件的定位

伪代码形式如下

f=open(r’somefile.txt’)

…xxx #do something

f.close

文件的读写和关闭

(1)文件的打开

对文件进行读写操作,首先要打开文件,这里用到open函数

Open函数,语法:

代码语言:javascript
复制
file object = open(file_name [, access_mode][, buffering])

各个参数的细节:

file_name变量是一个包含了你要访问的文件名称的字符串值。

access_mode:access_mode决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。

buffering:如果buffering的值被设为0,就不会有寄存。如果buffering的值取1,访问文件时会寄存行。如果将buffering的值设为大于1的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。

(2)文件的写入

Write()方法可将任何字符串写入一个打开的文件。写入的字符串可以是二进制的数据,也可以是文字,需要注意的是,write()方法不会在字符串的结尾添加换行符(‘\n’)。

语法:f.write(string)

string——要被写入到已打开文件的内容

例:

代码语言:javascript
复制
fo = open("temp.txt","wb")
fo.write("www.runoob.com!\nVery good site!\n".encode(encoding='utf-8'))
fo.close()

运行结果

(3)文件的读取

主要有以下方法:

read()方法,从一个打开的文件中读取一个字符串。需要注意的是,Python字符串可以是二进制数据,而不仅仅是文字。

语法:

Count——从已打开文件中读取的字节计数。

该方法从文件的开头开始读入,如果没有传入count,它会尝试尽可能多地读取更多的内容,可能直到文件的末尾

例:

代码语言:javascript
复制
with open('temp.txt','r+') as f:
    print(f.read(15))

运行结果:

代码语言:javascript
复制
www.runoob.com!

readline()方法,从文件中读取单独一行。如果返回一个空字符串,说明已经读取到最后一行。

例:

代码语言:javascript
复制
fo = open("temp.txt","r")
print(fo.readline())
fo.close()

运行结果:

代码语言:javascript
复制
www.runoob.com!

readlines()方法,将以列表的形式返回该文件中包含的所有行,列表中的一项表示文件的一行。

例:

代码语言:javascript
复制
fo = open("temp.txt","r")
print(fo.readlines())
fo.close()

运行结果:

代码语言:javascript
复制
['www.runoob.com!\n', 'Very good site!\n']

(4)文件关闭

Close方法,为什么文件处理完后,一定要对文件关闭,主要是close方法作用是刷新缓冲区里任何还没写入的信息,如果不能正常关闭,缓冲在内存中的数据就不能真正写入到文件中,可能造成数据丢失,这一点大家一定要注意了。

文件的模式

上面只列举了Python的读和写常用的方法,如果有其他需求,Python也给出了其他的文件模式,如下图所示,只需改变一下open函数里面的模式参数就可以。

不同模式打开文件的完全列表

如果在读文件的时候,对文件进行写数据的操作,会发生什么?

例:

代码语言:javascript
复制
fo = open("temp.txt","r")
fo.write('aaa')
fo.close()

运行结果:

代码语言:javascript
复制
io.UnsupportedOperation: not writable

会发生异常,因为当前的模式是可读。

同理,当我们在文件末尾追加写入(a+)文件时,如果进行读文件的操作,也是会报错的。

所以,对文件处理来说,读就对应读的追加模式,写就对应写的追加模式,不可混淆使用。

文件的定位

有时候我们只想读文件的一部分内容,或者需要从文件的某个位置读数据,此时就要用到seek函数。

语法:seek(offset,from)。

Offset—表示要移动的字节数;from—指定开始移动字节的参考位置。

例:

====123.txt===

123456789

如果from被设为0,则将文件的开头作为移动字节的参考位置

代码语言:javascript
复制
f = open('123.txt')
f.seek(0,0)
print(f.read(3))
f.close()

结果:

代码语言:javascript
复制
123

如果from被设为1,则使用当前位置作为参考位置

代码语言:javascript
复制
f = open('123.txt','rb')
f.seek(3,1)
print(f.read())
f.close()

结果:

代码语言:javascript
复制
b'456789'

如果from被设为2,则将文件的末尾作为参考位置

代码语言:javascript
复制
f = open('123.txt','rb')
f.seek(-3,2)
print(f.read())
f.close()

结果:

代码语言:javascript
复制
b'789'

说一下,这里需要在open函数里加入’rb',不然运行seek函数是会报错的,而且我试了下,只有‘rb'运行不会出错,’r'和‘r+’都不行。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 googpy 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档