首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >预备小菜:Python入门之操作文件

预备小菜:Python入门之操作文件

作者头像
马拉松程序员
发布2023-02-24 18:50:20
发布2023-02-24 18:50:20
43300
代码可运行
举报
运行总次数:0
代码可运行

文件的读写操作是数据分析经常遇到的场景,也是常见的I/O(Input/Output)场景。我们常用的一般是excel文件、txt文件、csv文件。单个的txt或者csv文件是比单个excel文件储存的行数多。不过Excel目前最大的支持的行数是1048756行,对于刚开始接触数据分析的人来说,是完全足够了,如果有成千万甚至上亿的数据时,会采用一些大数据相关的技术处理,并不是我们讲述的重点,所以我们就先用txt文件来演示一下,Python是如何读取和写入的。

读取文件

首先我们在电脑本地创建一个test.txt的文件,文件中写入四行内容,如图所示。

然后我们开始读取文件,在Python中提供了一个内置函数open(),它用于打开一个文件,创建一个file 对象,然后可以对file 对象进行读取操作。

代码语言:javascript
代码运行次数:0
运行
复制
test = open('test.txt', 'r')
print(test.read())
#代码结果:
hello
world
Python
数据分析

上面open()函数中有两个参数,第一个是文件的名称,可以使用相对路径,也可以使用绝对路径,如果使用相对路径则需要当前代码脚本文件和读取文件同一级目录,否则就是抛出一个FileNotFoundError的异常。

FileNotFoundError: [Errno 2] No such file or directory: 'test.txt'

第二个参是指的文件的打开方式,比如只读,写入或者追加等,如果不添加的话,默认是只读方式打开文件。在Python中文件打开方式多达10余种,常用的打开方式如表所示。

打开方式

作用

功能描述

r

以只读方式打开文件,文件不存在则报错

r+

读、覆盖写

以读写方式打开文件,文件不存在则报错

rb

以只读方式打开文件读取二进制数据,文件不存在则报错

rb+

读、覆盖写

以读写方式打开文件操作二进制数据,文件不存在则报错

w

以只写方式打开文件,文件存在则覆盖,不存在则创建

w+

读、覆盖写

以读写方式打开文件,文件存在则覆盖,不存在则创建

wb

以只写方式打开文件写入二进制数据,文件存在则覆盖,不存在则创建

wb+

读、覆盖写

以读写的方式打开文件写入二进制数据,文件存在则覆盖,不存在则创建

a

追加写

追加内容,新写的内容添加到已有内容之后,不覆盖,若文件不存在则会创建文件

a+

读、追加写

读写内容,新写的内容添加到已有内容之后,不覆盖,若文件不存在则会创建文件

ab

追加写

追加二进制数据,新写的内容添加到已有内容之后,不覆盖,若文件不存在则会创建文件

ab+

读、追加写

读写二进制数据,新写的内容添加到已有内容之后,不覆盖,若文件不存在则会创建文件

以上各种方式无法就是三个操作,读r(read),写w(write),追加a(append),如果带b表示操作的是二进制数据,二进制表示的文件在硬盘上存储的数据原始的样子。上面的示例使用二进制读取是这样的:

代码语言:javascript
代码运行次数:0
运行
复制
test = open("test.txt", 'rb')
print(test.read())
#代码结果:
b'hello\nworld\nPython\n\xe6\x95\xb0\xe6\x8d\xae\xe5\x88\x86\xe6\x9e\x90'

为什么使用二进制的数据呢?因为图片或视频文件是不能用字符串方式来显示,所以只能用二进制的方式来读写,而且二进制数据可以跨平台使用。

写入文件

在上一个小节,我们看到了12种文件打开方式用于读写操作,而且读写需要的mode不一样,那如果用只读模式打开,进行写操作会有什么样的结果呢?

代码语言:javascript
代码运行次数:0
运行
复制
test = open("test.txt", 'r')
word = '一个新字符串'
test.write(word)

运行结果呢,不出意外,报错

io.UnsupportedOperation: not writable

所以需要按照指定的文件打开方式:

代码语言:javascript
代码运行次数:0
运行
复制
test = open("test.txt", 'w')
word = '一个新字符串'
test.write(word)

这是打同级目录下的test.txt文件,发现只有一行文字,就是我们新写入的字符串。同样如果是用写的方式打开文件,进行文件的操作的时候也会同样报io异常:not readable。

注意:文件的写操作,默认的编码是系统编码,而最常用的中文window系统默认的编码格式是GBK,如果使用追加写的方式,原来文件内容字符编码的不统一的话,会产生乱码。所以有关写的操作的时候,最好在open()时指定字符编码,以免出现乱码。

最后我们再看下append的方式是怎么样的,继续使用上面的test.txt文件,继续写入:

代码语言:javascript
代码运行次数:0
运行
复制
test = open("test.txt", 'a')
word = '又一个新字符串'
test.write(word)

这时我们查看一下text.txt文件,文件内容是:"一个新字符串又一个新字符串",可见“a”方式是实现了追加写而不是覆盖写。

不过以上三个示例的写法并不规范,如果在代码中打开了某个文件,没有释放掉,其他的程序是无法操作文件,所以需要在最后关闭文件,而且在文件操作时候还需要进行异常处理,所以完善的写法应该是如下。

文件操作完整写法:

代码语言:javascript
代码运行次数:0
运行
复制
try:  
    test = open("test.txt", 'r', encoding="UTF8")  
    word = '又一个新字符串'  
    test.write(word)  
except Exception as e:  
    print("操作文件异常:{}".format(e))  
finally:
test.close()

如果每次操作文件的时候需要写try 捕获异常,还需要释放资源。这样代码显得很冗余,所以Python中还提供了一种方法就是with用法,会自动进行资源的获取和释放,用法也比较简单易懂。

文件操作完整写法:

代码语言:javascript
代码运行次数:0
运行
复制
with open("test.txt", 'a', encoding="UTF8") as test:
word = '又一个新字符串'
test.write(word)

with 语句实质是上下文管理,多用于文件操作、数据库连接操作等应用场景。

小结

多数情况下,操作的是excel文件,而操作excel文件会有很多专用的库,例如openpyxl等,这些内容等到后面需要的再讲到。

对于数据分析入门来讲,Python的这些基础知识就基本够用,当然它不仅仅能做数据分析,还可以开发web,也支持面向对象的编程方式,语言的深度远不止这些,感兴趣的可以自行找一些学习资料,毕竟现在网上最不缺的就是老师。

预备小菜的章节到这里就结束了,后面我们开始制作“大餐”。

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

本文分享自 马拉松程序员 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文件的读写操作是数据分析经常遇到的场景,也是常见的I/O(Input/Output)场景。我们常用的一般是excel文件、txt文件、csv文件。单个的txt或者csv文件是比单个excel文件储存的行数多。不过Excel目前最大的支持的行数是1048756行,对于刚开始接触数据分析的人来说,是完全足够了,如果有成千万甚至上亿的数据时,会采用一些大数据相关的技术处理,并不是我们讲述的重点,所以我们就先用txt文件来演示一下,Python是如何读取和写入的。
  • 读取文件
  • 写入文件
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档