前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每天 3 分钟,小闫带你学 Python(二十四)

每天 3 分钟,小闫带你学 Python(二十四)

作者头像
小闫同学啊
发布2019-08-16 11:12:36
6820
发布2019-08-16 11:12:36
举报
文章被收录于专栏:小闫笔记
正文共:3990 字 7图 预计阅读时间:10分钟

每日分享

Life isn’t about finding yourself. Life is about creating yourself.

生活不是要寻找自己。生活的真正意义是塑造自己。

小闫语录:

前一段时间的哪吒曾说过『我命由我不由天』自己是自己的主宰,你可以活成任何想要的模样。

前言

昨天的文章『每天 3 分钟,小闫带你学 Python(二十三)』讲解了很多零碎的知识点:

1.递归函数为函数内部调用本身。

2.匿名函数使用关键字 lambda

3.列表推导式、字典推导式、三目运算符都可以利用单行代码达到多行代码的操作。

4.三个常用工厂函数 set/tuple/list

学习目标

1.熟练掌握文件的相关操作

大家每天都在电脑上操作着文件,如文本文件 xx.txt 或者 Excel 表格 xx.xlsx等,那么 Python 是如何操作这些文件的呢?且听我慢慢道来。

1.文件的打开与关闭

在 Python 中使用函数 open() 来进行文件的打开操作。如下表示以 的模式打开文件 test.txt

代码语言:javascript
复制
file = open('test.txt', 'w')

open 括号中第一个参数为文件的路径,第二个参数为操作的模式。

路径:路径表示文件在电脑中的位置,如下就是 Windows系统中文件夹 Cache 的 路径:

代码语言:javascript
复制
D:\CloudMusic\Cache

路径又分为绝对路径相对路径,绝对路径是从你首先要打开的那个文件夹开始算,像上面的路径一样,首先要打开的是 D 盘,那么就从 D 盘开始一直到要表示的文件或者文件夹位置。相对路径就是以当前文件夹的位置为标准,进行表示。如当前目录表示为 ./,上一级目录表示为 ../。(目录就是文件夹的意思,在 Linux 系统中路径使用 /,在 Windows 系统中路径使用 \,这一点需要注意。 MacOS 苹果系统是 Unix 系统,与 Linux 系统类似。)

模式:如示例中 w 表示为写,那么其他模式怎么表示呢?如下:

访问模式

说明

r

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

w

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

a

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

rb

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

wb

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

ab

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

r+

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

w+

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

a+

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

rb+

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

wb+

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

ab+

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

文件的指针是一个记录位置的东西,可以简单的理解为在文件中进行操作时的光标,光标在哪里就从哪里开始输入,如下图中一闪一闪的竖线(不是鼠标):

注意:使用函数 open() 的写模式或追加模式等,如果文件存在,那么会对该文件进行操作;如果文件不存在,则会创建该文件,然后对其操作。如果第一个参数,只写一个文件名,默认表示在当前文件夹中。

既然学会打开文件了,那么使用完毕要关闭文件该如何操作呢?打开是 open ,关闭是 close ?没错,就是这么简单粗暴。如下:

代码语言:javascript
复制
# 以写模式打开文件test.txt
f = open('test.txt', 'w')
# 关闭这个文件
f.close()

2.文件的读写

既然学会了打开文件和关闭文件,接下来该关心的便是写数据和读数据。不能光打开笔记本,不写点笔记或者看看笔记吧?

写使用 write(),比如我要给文件 Pythonnote.txt 中写一句话 请关注小闫笔记 ,需要进行如下操作:

代码语言:javascript
复制
# 以写模式打开文件,没有该文件就在当前目录下创建该文件
f = open('Pythonnote.txt', 'w')
# 给文件中写一句话
f.write('请关注小闫笔记')
# 写完之后关闭文件
f.close()

写笔记需要先打开笔记本,写完笔记要合上笔记本。文件的读写也是类似的过程。

读数据怎么办呢?可以使用 read() (按字节读),也可以使用 readlines()(按行读)。

使用 read(num) 从文件中读取数据时, num 表示要从文件中读取的数据的长度(单位是字节),如果没有传入 num,就表示读取文件中所有的数据。

比如要打开一个文件,然后读里面的内容:

代码语言:javascript
复制
# 以读模式打开文件
f = open('Pythonnote.txt', 'r')
# 最多读取5个字节
content = f.read(5)  
print(content)
# 分割线,用来测试
print("-"*30)  
# 从上次读取的位置继续读取剩下的所有的数据
content = f.read()  
print(content)
# 关闭文件,这个可是个好习惯哦
f.close()

open 打开文件时,如果使用的模式为 "r",可以省略,即:

代码语言:javascript
复制
open('test.txt')

就像 read 没有参数时一样, readlines 可以按照行的方式把整个文件中的内容进行一次性读取,并且返回一个列表,其中每一行的数据做为一个元素。

代码语言:javascript
复制
f = open('test.txt', 'r')
content = f.readlines()
print(type(content))

i=1
for temp in content:
    print("%d:%s" % (i, temp))
    i += 1

f.close()

写的一时兴起,差点忘记还有一个函数,那便是 readline ,它是读一行,用法和 readlines 一样,此处不举例。

注意:readline 和 readlines 的括号中其实也可以传入一个数字,但是它指的是字节,而非行数,大家可以试验一下。

3.文件和文件夹的相关操作

Python 如果只能打开或者关闭一个文件,给里面写点东西或读点东西,那未免太 low 了吧?Python 可是超级强大的,你随便提需求,我来实现。

1.它能给文件重命名吗?生活中这可是非常常见的情况呢。当然可以。在模块 OS 中有一个方法叫做 rename,如下:

代码语言:javascript
复制
# 将毕业论文12稿改为毕业论文最终版
# 首先导入模块,此处记住形式即可,模块后面讲到
import os
# 重命名
os.rename("毕业论文12稿.txt", "毕业论文最终版.txt")

2.它能删除一个文件吗?不能删除我学他有什么用?可以!比如你不想活了,然后将写了一个月的毕业论文删除:

代码语言:javascript
复制
import os
os.remove("毕业论文.txt")

3.它能创建文件夹吗?不能创建文件夹我就不学 Python 了。当然可以。比如你想放一些家庭爱情动作类型的小电影,可以创建一个私密目录:

代码语言:javascript
复制
import os
os.mkdir("xxoo")

4.我想知道当前的文件夹路径怎么办?按我说的做:

代码语言:javascript
复制
import os
os.getcwd()

5.我不想在默认的当前目录下操作了,能不能进入上一层目录?当然可以,我来实现:

代码语言:javascript
复制
import os
os.chdir("../")

6.我不知道当前文件夹下有哪些文件夹,Python 能帮我看看吗?好嘞!

代码语言:javascript
复制
import os
os.listdir("./")

7.我女朋友借我电脑用,我之前利用 Python 创建的小电影文件夹赶紧帮我删除。好嘞!

代码语言:javascript
复制
import os
os.rmdir("xxoo")

作业

1.写一个程序,要求输入文件的名字,然后程序自动完成对文件的备份操作,比如文件名末尾添加复件俩字。

参考答案:

代码语言:javascript
复制
# 提示输入文件
oldFileName = input("请输入要拷贝的文件名字:")

# 以读的方式打开文件
oldFile = open(oldFileName,'rb')

# 提取文件的后缀
fileFlagNum = oldFileName.rfind('.')
if fileFlagNum > 0:
    fileFlag = oldFileName[fileFlagNum:]

# 组织新的文件名字
newFileName = oldFileName[:fileFlagNum] + '[复件]' + fileFlag

# 创建新文件
newFile = open(newFileName, 'wb')

# 把旧文件中的数据,一行一行的进行复制到新文件中
for lineContent in oldFile.readlines():
    newFile.write(lineContent)

# 关闭文件
oldFile.close()
newFile.close()

2.写一个程序,达到批量修改文件名的效果。将当前目录下所有的文件名都添加前缀(小闫笔记)。

参考答案:

代码语言:javascript
复制
import os
# 获取指定路径的所有文件名字
dirList = os.listdir("./")

# 遍历输出所有文件名字
for name in dirList:
    newName = '[小闫笔记]-' + name
    os.rename("./" + name, "./" + newName)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-08-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 全栈技术精选 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 每日分享
  • 前言
  • 学习目标
  • 1.文件的打开与关闭
  • 2.文件的读写
  • 3.文件和文件夹的相关操作
  • 作业
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档