轻松搞定编码与文件读写,用Python制作文档搜索器

“本文阅读时间大概为5分钟”

Hello,小数先生粗线啦~~~今天教大家设计文档搜索器

先看下搜索器效果(文中最后有源代码)

上传视频封面

好的标题可以获得更多的推荐及关注者

编码

编码的本质就是让只认识0和1的计算机,能够理解人类使用的语言符号,并将数据转换为二进制进行存储和传输

二进制

二进制的运算规律是逢二进一

二进制  ——  十进制

00    ——    0

01    ——    1

10    ——    2

11    ——    3

当有两个二进制位可以表示十进制的0,1,2,3四种状态(2的2次方)

用来存放一位0或1,就是计算机里最小的存储单位,叫【位】,也叫【比特】(bit)

8个比特构成一个【字节】(byte)

注:1 byte = 8 bit

注:运营商的宽带是以比特每秒位的,所以100M就相当于100Mbit/s

编码表

编码表的前世今生:

美国最先出台了ASCII编码,统一规定了常用符号用哪些二进制表示。每个国家都有自己的一套编码标准,中国科学家为了迎合汉字,出台了GB2312编码,为了显示更多中文,又出台了GBK标准。

为了沟通便利,Unicode(万国码)应运而生,将世界上所有的符号都纳入其中,这样所有的语言都要占用两个字节。缺点也暴露了出来,原本储存A,使用00010001就可以,现在要使用两个字节:00000000 00010001,对计算机存储是种极大的浪费。

科学家又提出了天才的想法:UTF-8(8-bit Unicode Transformation Format)。Unicode是内存编码的规范,而UTF-8是如何保存和传输Unicode的手段。

文件读写

是Python代码调用电脑文件的主要功能,能被用于读取和写入文本记录、音频片段、Excel文档、保存邮件以及任何保存在电脑上的东西

读取文件

总共就三步

测试前准备:

1.小数先生提前在桌面创建了一个test文件夹,文件夹里新建一个名为a.txt

2.在a.txt添加内容

【第一步:开】使用open()函数打开文件

file = open(r'c:\Users\MACHENIKE\Desktop\test\a.txt','r',encoding='gbk'

注:file这个变量是存放读取的文件数据的

open()函数里面三个参数:

1.第一个参数【c:\Users\...\a.txt】是文件的保存地址(小数先生和你的文件地址可能会不一样)

查看保存地址的方法:

通过VS Code查看

也有其他方法可以查看,小伙伴们可以通过自己方式来找到答案

因为'\'在Python中是转义字符,为了避免冲突,Windows的绝对路径通常在路径前面加个r防止转义

open(r'c:\Users\MACHENIKE\Desktop\test\a.txt','r',encoding='gbk')

# 等同于

open('c:\\Users\\MACHENIKE\\Desktop\\test\\a.txt','r',encoding='gbk')

2.第二个参数【r】表示打开文件时的模式

字符串'r'表示read,表示以读的模式打开这个文件

3.第三个参数【encoding='gbk'】,表示的是返回的数据采用何种编码,一般采用uft-8或者gbk

【第二步:读】

file = open(r'c:\Users\MACHENIKE\Desktop\test\a.txt','r',encoding='gbk')

filecontent = file.read()

print(filecontent)

输出

数仁信息

小数先生

注:如果运行时报错UnicodeDecodeError,把encoding='gbk'改成encoding='utf-8'

【第三步:关】关闭文件,使用close()函数

file = open(r'c:\Users\MACHENIKE\Desktop\test\a.txt','r',encoding='gbk')

filecontent = file.read()

print(filecontent)

file.close()

关闭文件的目的:

①计算机打开的文件数量有限,open过多而不close,就不能再打开文件了

②保证写入的内容已经在文件里保存

写入文件

和读取文件一样,也是三步

【第一步:读】以写入的模式打开文件

file = open(r'c:\Users\MACHENIKE\Desktop\test\a.txt','w',encoding='gbk')

注:第二个参数改成了'w',表示write。以写入的模式打开文件

【第二步:写】往文件中写入内容,使用write()函数

file = open(r'c:\Users\MACHENIKE\Desktop\test\a.txt','w',encoding='gbk')

file.write('早上好\n') # \n表示另起一行

file.write('小数先生粗线啦~~~~\n')

注:如果不想完全覆盖原文件,只想增加东西,可以使用'a'模式,表示append

【第三步:关】使用close()函数

file = open(r'c:\Users\MACHENIKE\Desktop\test\a.txt','w',encoding='gbk')

file.write('早上好\n') # \n表示另起一行

file.write('小数先生粗线啦~~~~\n')

file.close()

注:只是运行了代码,终端没有内容输出

我们查看下a.txt文件,里面内容已经被更改了

open()函数第二个参数总结图

知识拓展

1.readlines()函数,按行读取

file = open(r'c:\Users\MACHENIKE\Desktop\test\a.txt','r',encoding='gbk')

filecontent = file.readlines()

print(filecontent)

file.close()

输出

['早上好\n', '小数先生粗线啦~~~~\n']

我们可以通过遍历把每一行的数据打印

file = open(r'c:\Users\MACHENIKE\Desktop\test\a.txt','r',encoding='gbk')

file_lines = file.readlines()

for i in file_lines:

    print(i)

file.close()

输出

早上好

小数先生粗线啦~~~~

2.writelines()函数,参数可以是序列(列表,元组)。write()函数,参数只能是字符串

input_b = ['工资','100','奖金','100']

file = open(r'c:\Users\MACHENIKE\Desktop\test\b.txt','w',encoding='gbk')

file.writelines(input_b)

file.close()

注:这次打开是b.txt的文件,如果电脑不存在b.txt,这行代码会自动创建一个b.txt

桌面test文件里会多出一个b.txt文件

b.txt里面的内容

文档搜索引擎源代码

# 根据输入的关键词查询文档内匹配字段

file_adress = input('输入查询文档绝对路径:')

file = open(r'{}'.format(file_adress),'r',encoding='gbk')

print('-'*30+'文档搜索引擎'+'-'*30+'\n')

file_lines = file.readlines()

while True:

    employee_name = input('输入员工姓名,即可查询工资:') # 查询关键词

    for file_line in file_lines:

        if employee_name in file_line:

            print(file_line)

    p_choice = input('【1】继续查询  【2】退出:')

    print(' ')

    if p_choice == '2':

        break

print('-'*30+' 搜 索 结 束 '+'-'*30)

file.close()

你可能感兴趣的:(轻松搞定编码与文件读写,用Python制作文档搜索器)