首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

python文件操作全套讲解(一):读取文件

东尧爱分享

这是东尧每天一篇文章的第22天

东尧写文章的目标:分享东尧的经验和思考,帮你获取物质和精神两方面幸福。

我们电脑上有很多的文件,包括txt等等,那python如何读取这些文件,又如何写文件呢?实际上Python中是使用open函数来进行文件的访问。今天的教程就教大家python文件的读写相关操作。

读写文件前,我们先必须了解一下,在磁盘上读写文件的功能都是由操作系统提供的,现代操作系统不允许普通的程序直接操作磁盘。

所以,读写文件就是请求操作系统打开一个文件对象(通常称为文件描述符),然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

1

文件操作函数

打开和创建文件对象函数open()

file_object = open(file_name, access_mode='r', buffering=-1)

参数说明:

file_object变量名,用于标识这个文件对象

file_name你要打开的文件名(字符串),它可以是相对路径也可以是绝对路径

access_mode文件的打开方式,默认是以只读的方式打开

buffering访问文件的缓冲方式。0表示不缓冲,1表示只缓冲1行数据,任何其它大于1的值代表使用给定值作为缓冲区大小。不提供该参数或者给定负值代表使用系统默认缓冲机制,一般情况下采用系统默认的就好。

路径说明:

相对路径:如果文件与python代码文件在同一个文件夹内(当前文件夹),就不用写路径,直接写文件名就好了。

绝对路径:对文件进行右键单击,在属性里面就可以查看到文件的绝对路径了。使用open函数时将绝对路径填写进去即可。例如:hello = open('D:\learning\python\learning\hello.txt','r+')

文件打开方式说明:

模式

说明

r

以只读方式打开

rU或U

以读方式打开,同时提供通用换行符支持

w

以写方式打开,如果文件已经存在,会覆盖掉原来的数据

a

以追加模式打开,在文件后面追加数据,不能读

r+

以读写模式打开

w+

以读写模式打开,参见w

a+

以读写追加模式打开,参见a

rb

以二进制读模式打开

wb

以二进制写模式打开

ab

以二进制追加模式打开

rb+

以二进制读写模式打开

wb+

以二进制读写模式打开

ab+

以二进制读写追加模式打开

如果文件不存在,open()函数就会抛出一个IOError的错误,并且给出错误码和详细的信息告诉你文件不存在:

>>> f=open('/Users/michael/notfound.txt', 'r')

Traceback (most recent call last):

File "", line 1, in

FileNotFoundError: [Errno 2] No such file or directory: '/Users/michael/notfound.txt'

文件打开实例:

本地文件:hello.txt,内容有3行:

hello world

hello python

seo

这个时候写了open()函数直接运行,是没有结果显示的(如下图)。

那么,打开了文件后怎么展示出文件内容呢?这时候就需要用到read()方法了。read()方法可以一次性将文件内的内容以字符串形式(包含文件的换行符)读取出来。

如果用“w”方法打开文件,只能是“写”模式,不能读取,此时再用read方法就会报错了。并且我们可以看到,原来文件内的内容已经没有了,被覆盖掉了(使用w或w+时,它都会默认先清空原来文件内的内容,再用新内容替换)。同理,“a”方法也是只能追加,不能读取,也不能用read方法,同样也会报错:

2

读取文件中的数据

* 使用read方法一次性读取所有的数据使用,包括换行符

* 使用readline方法每次只读取一行数据,包括换行符

* 使用readlines方法一次性读取完所有数据,包括换行符,并以列表的形式返回,列表中的每个元素就是原文件的一行

* 使用for循环迭代读取

* 使用列表推导式来将文件的每一行都读取到列表中去

read(),readline(),readlines()方法:

# read()方法读取全部数据

hello = open('hello.txt')

print(hello.read(),'\n')

# readline()方法读取一行数据

hello = open('hello.txt')

print(hello.readlinereadline())

# readlines()方法读取全部数据,并按行返回一个列表

hello = open('hello.txt')

print(hello.readlines())

使用for循环迭代读取文件数据

hello = open('hello.txt')

for line in hello:

print(line)

为什么上图的结果中每行数据间都会空一行呢?因为我们在print的时候就会默认换行,而文件中又包含了换行符,所以才会换行了两次。这个时候我们可以用strip方法来去掉换行符:

hello = open('hello.txt')

for line in hello:

print(line.strip())

使用迭代的方式对文件进行读写的好处在于比readlines等方法的速度更快,并且可以不用关闭文件,for()循环结束后会自动关闭文件。使用迭代的方法读写文件对大文件更有效。如果文件很小,read()一次性读取最方便;如果不能确定文件大小,反复调用read(size)比较保险;如果是配置文件,调用readlines()最方便。

使用列表推导式

使用列表推导式来将文件的每一行都读取到列表中去:

hello = open('hello.txt')

lines = [line.strip() for line in open('hello.txt')]

print(lines)

注意事项:read()方法实质上是将未读取的文件部分一次性读取出来,为什么这么说呢?咱们来看看下面这个实例:

hello = open('hello.txt')

print(hello.readlinereadline())

print(hello.read())

原文件内有5行内容,所以我们看到,readline()读取了一行后,read()读取的其实是剩下的未读取4行内容部分,并不是每次都是从开始全部读取。readlines()方法也是如此。

python文件的读取方法有很多,比较推荐的是使用for循环和列表推导式来读取,这样会更加节省资源,也更灵活。明天我们将继续python文件写入的学习,另外还有文件对象的内建方法等内容,欢迎大家继续关注!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180429G0C9NQ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券