轻松搞定编码与文件读写,用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()

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,372评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,368评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,415评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,157评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,171评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,125评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,028评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,887评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,310评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,533评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,690评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,411评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,004评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,812评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,693评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,577评论 2 353

推荐阅读更多精彩内容