关于我的编程语言——Python——第三篇

(叠甲:如有侵权请联系,内容都是自己学习的总结,一定不全面,仅当互相交流(轻点骂)我也只是站在巨人肩膀上的一个小卡拉米,已老实,求放过)

什么是文件

变量把数据保存到内存中,如果程序重启/主机重启,内存中的数据就会丢失,要想能够让数据被永久化存储,就可以把数据储存到硬盘中,也就是在文件中保存。

通过文件的后缀名,可以看到文件的类型,常见的文件类型如下,文本文件(txt)、可执行文件 (exe.dll)、图片文件(jpg,png)、视频文件(MP4,mov)……

本篇内容案例是最简单的文本文件

文件路径

一个机器上,会存在很多文件,为了让这些文件更方便的被组织,往往会使用很多的“文件夹”(也叫做目录)来整理文件。

实际一个文件往往是放在一系列的目录结构之中的,为了方便确定一个文件所在的位置,使用文件路径来进行描述。

绝对路径

绝对路径是指文件或目录在文件系统中的完整路径,它从文件系统的根目录开始,一直到目标文件或目录。就像是给出一个人的完整家庭住址,从国家、省、市、区(县)一直到具体的街道门牌号,这个完整的信息可以唯一确定一个位置。

相对路径

相对路径是相对于当前目录或文件位置来指定另一个文件或目录位置的路径。它不是从文件系统的根目录开始,而是从一个参考点(当前目录)出发。可以把它想象成你给别人指路时,以对方当前所在位置为起点来描述方向,而不是从城市的中心(根目录)开始描述。

文件操作

要使用文件,主要是通过文件来保存数据,并且把后续保存的数据读取出来。但是要想读写文件,需要先“打开文件”,读写完毕之后还要“关闭文件”。

打开文件

使用内建函数open打开一个文件

f = open('d:test.txt','r')

1)第一个参数是一个字符串,表示要打开的文件路径

2)第二个参数是一个字符串,表示打开方式,其中r表示按照读方式打开,w表示按照写方式打开。

3)如果打开文件成功,返回一个文件对象,后续的读写方式操作都是围绕这个文件对象展开。

4)如果打开文件失败(比如路径指定的文件不存在),就会抛出异常。

关闭文件

使用close方法关闭已经打开的文件。

f.close()

 使用完毕的文件要记得及时关闭。

一个程序能同时打开的文件个数,是存在上限的。

flist = []
count = 0
while True:
    f = open('d:/test.txt', 'r')
    flist.append(f)
    count += 1
    print(f'count = {count}')

上述代码中,使用一个列表来保存了所有的文件对象,如果不进行保存,那么Python内置的垃圾回收机制,会在文件对象销毁的时候自动关闭文件。

但由于垃圾回收操作不一定及时,所以我们写代码仍然要考虑手动关闭,尽量避免依赖自动关闭。

 写文件

文件打开之后,就可以写文件了。

1)写文件,要使用写方式打开,open 第二个参数设为'w'

2)使用write方法写入文件

f = open('d:/test.txt', 'w')
f.write('hello')
f.close()

使用记事本打开文件,即可看见文件修改后的内容

如果使用'r'方式打开文件,则会写入时会抛出异常

f = open('d:/test.txt', 'r')
f.write('hello')
f.close()

使用'w'一旦打开文件成功,就会清空文件原有的数据;

使用'a'实现“追加写”,此时原有内容不变,写入的内容会存在于之前文件内容的末尾;

f = open('d:/test.txt', 'a')
f.write('world')
f.close()

针对已经关闭的文件对象进行写操作,也会抛出异常

f = open('d:/test.txt', 'w')
f.write('hello')
f.close()
f.write('world')

读文件

1)读文件内容需要使用'r'的方式打开文件

2)使用read方法完成操作,参数表示“读取几个字符”

f = open('d:/test.txt', 'r')
result = f.read(2)
print(result)
f.close()

如果文本是多行文本,可以使用for循环一次读取一行

f = open('d:/test.txt', 'r')
for line in f:
    print(f'line = {line}')
f.close()

一运行你就会发现“报错了”、或者出现乱码(解决方法如下)

 关于中文的处理

当文件内容存在中午的时候,读取文件内容不一定顺利,计算机表示中午的时候,会采取一定的编码方式,我们称为“字符集”

所谓“编码方式”,本质就是使用数字表示汉字;

计算机只能表示二进制数据,想要表示英文字母,或者汉字,或者其他文字符号,就是都要通过编码;

最简单的字符编码就是ascii,使用一个普通的整数就可以表示英文字母和阿拉伯数字;

但是想表示汉字,就需要一个更大的码表;

一般常用的汉字编码方式,主要是GBK和UTF-8;

必须要保证文本本身的编码方式 和 Python代码中读取文件使用的编码方式匹配,才能避免出现上述问题;

Python中默认打开文件的字符集跟随系统,而windows简体中文的字符集采用了GBK,所以如果文件本身是GBK的编码,直接就能正确处理,如果文本本身是其他编码(比如 UTF-8),那么直接打开就可能出现上述问题;

使用记事本打开文本文件,在“菜单栏”“->”“另存为”窗口中,可以看到当前文件的编码方式。

如果此处的编码为ANSI,表示GBK编码

如果此处为UTF-8,则表示UTF-8编码

此时修改打开文件的代码,给open 方法加上 encoding参数,显示的指定为和文本相同的字符集,问题即可解决。

f = open('d:/test.txt', 'r', encoding='utf8')

注:由于文件里每一行末尾都自带换行符,print 打印一行的时候又会默认加上一个换行符,因此打印结果看起来存在空行。

使用下面代码可以解决

print(f'line = {line}',end = '')

使用readlines直接把文件整个内容读取出来,返回一个列表,每一个元素为一行。

f = open('d:/test.txt', 'r')
lines = f.readlines()
print(lines)
f.close()

使用上下文管理器

打开文件后,是容易忘记关闭的,Python提供了,上下文管理器,来帮助程序员自动关闭文件

1)使用with语句打开文件;

2)当with 内部的代码块执行完毕后,就会自动调节关闭方法;

with open('d:/test.txt', 'r', encoding='utf8') as f:
    lines = f.readlines()
    print(lines)

使用库

库就是别人写好了的代码,可以让我们直接拿来用,一个编程语言能不能流行起来,一方面取决于语法是否简单便于学习,一方面取决于生态是否完备,所谓的生态就是语言是否有足够丰富的库,来应对各种各样的场景。

按照库的来源,可以大致分成两大类

1)标准库,Python自带的库,只要安装了Python就可以直接使用;

2)第三方库,其他人实现的库,想要使用,需要额外安装;

标准库

Python 自身内置了非常丰富的库,简单来说,主要是这些内容,内置函数(print,input等)、内置类型(int,str,bool等)、文本处理、时间日期、文件目录……

使用import导入模块

使用import可以导入标准库的一个模块

import [模块名]

所谓的“模块”其实就是单独的.py文件

使用import语句可以把这个外部的.py文件导入到当前.py中,并执行其中的代码

例:日期计算

输入任意两个日期,计算两个日期之间隔了多少天

1)使用import 语句导入标准库的datatime模块

2)使用datatime.datatime构造两个日期,参数使用年,月,日,这样的格式

3)两个日期对象相减,即可得到日期的差值

import datetime
date1 = datetime.datetime(2012,7,12)
date2 = datetime.datetime(2012,7,8)
print(date1-date2)

 

 其他还要很多有趣的库内容可以去官方,库自行查看https://docs.python.org/3.10/library/index.html

第三方库

第三方库就是别人已经实现好的库,我们可以拿过来直接使用,虽然标准库已经很强大了,但终究是有限的,而且第三方库可以视为是集合了全世界Python程序员的智慧。

使用pip

pip是Python内置的包管理器

所谓包管理器就类似于我们平时手机App的应用商店一样,第三方库有很多,是不同的人,不同的组织实现的,为了方便大家整理,Python官方提供了一个网站PyPI https://pypi.org/, 来收集第三方库。

pip在我们安装Python的时候就已经内置了,无需额外安装;

pip是一个可执行程序,就在Python的安装目录中,打开cmd,直接输入pip,如果显示一下帮助信息,说明pip已经准备就绪了

如果提示

'pip'不是内部或外部命令,也不是可运行的程序或批量处理文件

则说明没有正确的pip加入到path中,可以把,pip所在的路径加入到path环境变量中。可以自行检索如何正确的添加路径,此处就不过多赘述了。

使用一下命令,即可安装第三方库

pip install [库名]

注:这个命令需要从网路上下载,使用时要保证网络畅通,安装成功后,即可使用import导入相关模块,即可进行使用。

注:如果使用pip安装完第三方库之后,在Pycharm 中仍然找不大对应模块的话,则检查Settings -> Project -> Python Interpreter ,看当前Python解释器设置是否正确(如果一个机器上安装了多个版本的Python,容易出现这种情况)。

例:生成二维码,得到情报,qrcode这个库,可以用来生成二维码。

查看qrcode文档(在PyPI搜索qrcode)

 在打开cmd 输入

pip install qrcode[pil]

编写代码

import qrcode

img = qrcode.make('你今天过的好吗?')
img.save('qrcode.png')

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值