前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >技术 | Python从零开始系列连载(十四)

技术 | Python从零开始系列连载(十四)

作者头像
灯塔大数据
发布2018-07-25 16:32:55
5530
发布2018-07-25 16:32:55
举报
文章被收录于专栏:灯塔大数据

导读为了解答大家初学Python时遇到各种常见问题,小灯塔特地整理了一系列从零开始的入门到熟练的系列连载,每周五准时推出,欢迎大家学积极学习转载~

Python文件操作

文件

什么是文件?

可能上图是你脑海中迅速闪过的可能

文件是存储在外部介质的数据集合,通常可以长久保存(前提是这个介质不易损坏)

通俗点说,文件就是存放数据的地方

2

绝对路径与相对路径

通常,我们使用电脑的时候,例如编写了一段代码,我们要把这段代码保存,方便下次使用

你可能会把这段代码保存在硬盘某个位置【坏笑

如果在Python中,我们要打开这个文件操作,该怎么操作呢?

就像大象装冰箱需要三步:

1.打开冰箱门

2.将大象放进去

3.关上冰箱门

【我的天 好残忍啊】

所以要打开这个文件操作也需要3个步骤:

1.找出文件存放的路径,打开文件

2.对文件修改操作

3.关闭文件

说到找出文件的存放路径,我们就必须讲讲绝对路径和相对路径的概念

3

绝对路径

绝对路径指的是从最初的硬盘开始一直进入到文件位置

例如下图

学习资料.avi 的绝对路径 D盘/学习资料文件夹/这真的是学习资料文件夹/学习资料.avi

4

相对路径

相对路径指的是当前所在位置继续向文件所在位置进发,例如我现在就在 学习资料文件夹 位置

那么,在这个位置要打开 学习资料.avi 文件

则相对位置是 这真的是学习资料文件夹/学习资料.avi

在Python中文件路径有两种表示方式,以我电脑上的 爬取某社区高清无码大图 文件为例

Python绝对路径写法:

E:\\编程学习资料\\爬取某社区高清无码大图.py

E:/编程学习资料/爬取某社区高清无码大图.py

划重点:大家应该注意到了,用双反斜线或者斜线区分层次

Python相对路径写法:

如果我Python从编程学习资料文件夹对这个py文件操作

相对路径写为: 爬取某社区高清无码大图.py

顺便说一句,我们装的anaconda默认在c盘某个管理员用户的目录

例如这样:

用户目录是123456(一般是你的电脑名称,桌面右键计算机可以看到)

则当你在默认位置启动Python,并且在Python中药打开一个文件时,可以直接将该文件放在123456这个目录里

直接写相对路径(这里是文件名)即可

我们演示一下:

例如我们要打开:

在Python中可以这样操作:

我们打开jupyter

说明默认位置确实是123456文件夹

我们在同一个目录下新开一个代码文档

我们已经打开了图片

小明:老湿!你个骗子!图片呢!!!

其实,返回的一串文字意思是说图片已经打开在内存中了,只不过还没显示出来

小明:老湿,快让图显示出来啊!

小明啊,不要急

我们刚才所用的是相对路径打开

如果是绝对路径打开,是这样的:

以上没有报错,并且出现了内容,说明打开成功

如果我们随便改个文件不存在的路径呢?

比如说,改成 D 盘:

通过报错信息,我们可以看出,提示是没有这个文件或者这个路径

当然这里我们 D 盘并没有这个路径

小明:老湿!说好的看图啊!!

好吧,我们看看这张图的内容

我们需要导入一个模块来针对图片做处理:

我们运行完会弹出一个窗口,图片内容显示了

小明:老湿!你这个骗子!

5

文件的编码

根据编码的不同,可以将文件分为文本字符二进制字节

文本字符,如汉字、英文字母、数字、标点等,字符是为了显示

二进制字节是计算机存储的形式,在计算机中,任何数据都是01串构成的二进制字节

当我们打开文本,看到的是字符,最终保存时候存储的是二进制字节

文本字符的编码可以在win自带的记事本保存时选择各种编码

这里不详细讲解这些编码方式,如果有兴趣,可以自行摆渡!

因为我们使用的是Python3.X版本,在这个版本中,文件默认的编码方式就是utf-8

文本字符的常用的编码有ASCII和Unicode

值得注意的是,在Python3.X中,字符串等所有的文本字符使用的是unicode编码,可以使用encode()进行编码为utf-8

使用decode()可以将utf-8文件解码为文本字符

相互转换如图所示:

我们在Python中看看具体例子:

这里将文本字符中的字符串编码为默认的utf-8文件

当然,除了utf-8编码,还有很多其他编码,比如gbk编码

我们将utf-8解码回来

但是,如果我们将编码出的utf-8使用gbk解码,则会报错

从错误原因看出,某位置的内容不能被解码出来

想想原因,可以这样理解

一句中文,可以翻译为英文,也可以翻译为韩文

而只懂中文和英文的翻译A可以将中文翻译(编码)为英文,也可以将英文翻译(解码)为中文

如果想要让翻译A去将韩文翻译(解码)为中文,他不懂韩文,做不到啊!

而不同的编码解码就像这里的各种国家语言相互翻译

我们继续看看:

我们将gbk编码后的内容解码

报错了!因为我们解码没加参数,默认的是用utf-8解码

所以,我们得用gbk解码:

用gbk编码的内容当然不能用utf-8解码咯~

所以总结一下,utf-8编码出的内容只能用utf-8解码,gbk编码的内容只能用gbk解码!

注意到编码后的内容像个字符串,在字符串前面有个b,这个b表示的是二进制

也印证了字符编码后转为二进制字节

此时再来看一下这个图,是不是更清晰了

我们可以通过之前学的type()函数查看内容的状态

编码前的字符串显示为str字符串类型

编码后的字符串显示为bytes字节类型

如果你熟悉网络爬虫,遇到的最麻烦的问题之一就是编码问题,你对这种编码解码问题一定很熟悉吧,哈哈

6

文件的写入

之前讲过了文件打开创建和关闭,我们接着来谈谈文件写入

之前我们说了使用open()加上文件的绝对路径或者相对路径可以打开文件

这里我们讲一个更简单的方法

我们导入os模块

os模块是和操作系统相关的模块

在Python中这样操作:

这段代码指出了当前的工作目录

我们在学习资料.txt中加入如下内容,并且保存

我们在Python中打开这个文件:

因为之前指出了当前目录,所以可以给出相对路径即可(学习资料.txt在当前的工作路径)

我们使用read()方法可以读取文本内容

我们还可以使用write()方法写入内容:

报错啦!这不科学啊!小明,你来解释一下!

小明:老湿,是不是你的文本保存了什么不健康的信息?

小明,你不要把自己的经历经验强加给别人!

小红:老师,上节课说过,默认的打开模式是 r (只读),所以不能写入.

嗯,小红说的对,我们修改一下,首先关闭文档

此时我们打开该txt:

内容已经写进去了!

我们在Python中读出来:

如果再次读取呢?

发现读出来的内容为空!

解释一下,这里的read()方法相当于读取全部内容,如果读完内容,再次读取时候,书签已经在文章末尾,再次往后读当然没有内容啦~

如果我只想读取一行呢?

文本一共两行,如果读取完最后一行,再次读取和上面的read()一样,当然没内容啦~

如果我想读取多行呢?

小红:老师,可以使用循环!

很好,我们试试!

可是为什么只有第二句被读出来了呢?

因为while中的判断已经执行了一次readline()

而在print()中的readline()执行读出的是第二句

当然,我们可以换成for循环:

下课

人生苦短,我选Python

未完待续,连载中.....

今日作业:

自己用Python创建一个文件,写一首诗并且读出来

(阿喂!是用Python读,不是让你用嘴读!)

好啦,这期的分享先到这里,大家可以按照上面的详细步骤进行练习,入门部分已经学完大部分啦!加油,我们下周五不见不散~

文章来源:Python爱好者社区

文章编辑:小柳

往期文章:

技术 | Python从零开始系列连载(十三)

技术 | Python从零开始系列连载(十二)

技术 | Python从零开始系列连载(十一)

技术 | Python从零开始系列连载(十)

技术 | Python从零开始系列连载(九)

技术 | Python从零开始系列连载(八)

技术 | Python从零开始系列连载(七)

技术 | Python从零开始系列连载(六)

技术 | Python从零开始系列连载(五)

技术 | Python从零开始系列连载(四)

技术 | Python从零开始系列连载(三)

技术 | Python从零开始系列连载(二)

技术 | Python从零开始系列连载(一)

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

本文分享自 灯塔大数据 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档