三个职分,零基础学习python_pickle

目录:

  职务:将文件(record.txt)中的数据开始展览私分,并安装以下规则保存起来。
  一.小甲鱼的对话单独保存为boy_*.txt的文件(去掉”小甲鱼:”)
  贰.小客服的对话单独保存为girl_*三个职分,零基础学习python_pickle。.txt的文件(去掉”小客服:”)
 
三.文本中一同有3段对话,分别保存为boy_1.txt、boy_2.txt、boy_3.txt、gilr_1.txt、gilr_2.txt、gilr_3.txt
      共多少个文件。(提醒:分裂的对话已经选用”====”举行分割)

  上次本身关系了对文件的读写等一多元操作,回看下,要想从文件内读取内容无论是read依然readline,读抽出来的是否都以字符串呢?那么只要想让字典、列表这几个数据类型保存进文件到读抽取来都以原先的品种不改变呢?那时大家推荐三个pytho新的模块,消除那一个难点!

  自个儿小白一枚,随着将来对测试要求进一步高,动不动就要去会1门编制程序语言,无法只可以学习深造Python,今日来看多少个月前依旧新手的人突然就早已能运用Python写轻易系统了,不能够,就算事先也简单学习过Python,不过仍然怒了,近年来径直再看鱼C工作室的Python教程,为什么看那几个?没怎么,因为上课没那么古板咯,于是乎就找那几个录像来探视,唯一的后天不足就是演习题要钱,坑~~~~不能够,没钱人家怎么继续玩下去啊,好了不说废话了,进入后天的大旨,由于事先二七课看过了,也没写博客,无法只好从2八课写起了,假如以往倍感还足以的话再补吗!注意:Python是三+版本的喔

  1、三个任务

 
代码清单1:

  pickle的真相正是选用部分算法将您的多少对象调换成二进制文件,储存在磁盘上,也可存在数据库可能别的机器上。

  明天首要讲的是Python操作文件,大家想转手既然是文本那我们必然要“张开”啊是还是不是,展开那英(nà yīng )文单词是什么?Open对不对,没错啦,那张开啥呢?所以open前边是还是不是得加文件路径?没有错,那随着文件展开了那您是想干嘛呢?(读、写?)所以,最主旨的开辟多个要素就来了嘛,如下,一般open(‘文件路线’,‘展开方式’)那样既可,别的默许。

  2、课时2九课后习题及答案

#打开record.txt文件
f = open('E:\\python\\record.txt')  

#定义3个变量,并对它们初始化
boy = []     
girl = []
count = 0

#循环读取文件
for each_line in f:

  #如果当前内容不"======",则继续读取内容;否则读取,开始写操作
  if each_line[:6] != "======":            

    #读取的内容以":"进行分割,分割后分别赋值给元组元素role和spoken
    (role,spoken) = each_line.split(':',1) 

    #如果对话角色为"小甲鱼",则将文件追加到boy列表中
    if role == '小甲鱼':                  
       boy.append(spoken)

    #如果对话角色为"小客服",则将文件追加到girl列表中
    if role == '小客服':                   
       girl.append(spoken)
  else:
     #定义输出文件名称
     file_name_boy = 'boy_'+str(count)+'.txt'  
     file_name_girl = 'girl'+str(count)+'.txt' 

     #打开文件
     boy_file = open(file_name_boy,'w')         
     girl_file = open(file_name_girl,'w')     

     #writelines的参数是序列(比如列表),它会迭代帮你写入文件。
     boy_file.writelines(boy)     
     girl_file.writelines(girl) 

     #关闭文件对象
     boy_file.close()                                   
     girl_file.close()                          

     #当前写操作完毕后,必须进行初始化操作,以准备下一个的写入操作
     boy = []
     girl = []
     count += 1

#因为第三段对话的结尾没有"===",所以需要再次进行上门的重复写操作,保存第三段对话
#定义输出文件名称     
file_name_boy = 'boy_'+str(count)+'.txt'  
file_name_girl = 'girl'+str(count)+'.txt'  

#打开文件    
boy_file = open(file_name_boy,'w')         
girl_file = open(file_name_girl,'w') 

#writelines的参数是序列(比如列表),它会迭代帮你写入文件。     
boy_file.writelines(boy)   
girl_file.writelines(girl) 

#关闭文件对象      
boy_file.close()                                
girl_file.close()                    

#关闭文件对象
f.close()   

  pickling(存放):能够将python的靶子以2进制流格局存放在文件内

澳门葡京备用网址 1

 

  代码清单二:

  unpickling(读取):将文件内的2进制流转变为对象

设若我们open时展开情势不填写就象征只读,即为’r’,来看1看下边,这么多样开发方式总有您欣赏的吧^-^

****************

#定义一个保存文件的方法
def save_file(boy,girl,count):

   #定义输出文件名称
   file_name_boy = 'boy_'+str(count)+'.txt'   
   file_name_girl = 'girl'+str(count)+'.txt'

   #打开文件
   boy_file = open(file_name_boy,'w')         
   girl_file = open(file_name_girl,'w')

   #writelines的参数是序列(比如列表),它会迭代帮你写入文件。   
   boy_file.writelines(boy)     
   girl_file.writelines(girl)  

   #关闭文件对象     
   boy_file.close()                                  
   girl_file.close() 

#定义一个读取和分割文件内容的方法   
def read_file(filename):

   #打开record.txt文件
   f = open('E:\\python\\record.txt')  

   #定义3个变量,并对它们初始化
   boy = []     
   girl = []
   count = 0

   #循环读取文件
   for each_line in f:

   #如果当前内容不"======",则继续读取内容;否则读取,开始写操作
   if each_line[:6] != "======": 

      #读取的内容以":"进行分割,分割后分别赋值给元组元素role和spoken   
      (role,spoken) = each_line.split(':',1)

      #如果对话角色为"小甲鱼",则将文件追加到boy列表中
      if role == '小甲鱼':                 
         boy.append(spoken)

      #如果对话角色为"小客服",则将文件追加到girl列表中
      if role == '小客服':                 
         girl.append(spoken)

   else:
       #保存文件
       save_file(boy,girl,count)     

       #保存完文件后,再初始化变量       
       boy = []
       girl = []
       count += 1

   #因为第三段对话的结尾没有"===",所以需要再调用save_file方法,保存第三段对话
   save_file(boy,girl,count)

   #关闭文件对象
   f.close()

#主方法:只要调用read_file就可以完成所有的操作
read_file('E:\\python\\record.txt')  

 一、上边是存放list壹那个列表到d盘test.pkl文件内:

澳门葡京备用网址 2

1、3个职责

  难点延伸: 如下图:为啥boy[]、girl[]、count地方分歧,结果完全分裂吧?

澳门葡京备用网址 3

  哎呀呀,展开完文件后,那你想下大家要干嘛呢?读文件内容依旧写东西进去文件对不?由此就有了上面方法,哎,专业术语叫文件对象方法,老年记者不住专业名称,你们可得记住哟!还有即使Python有垃圾回收机制,但是大家编辑读取文件时,完结操作后记得关闭文件哟,不然突然断电那内部存款和储蓄器内的数量只是会丢掉的喔,因为大家编辑的时候是保存在内部存款和储蓄器的,只有关门文件时才会保留到地头!

****************

  澳门葡京备用网址 4

记得展开文件要以二进制方式张开(b)

澳门葡京备用网址 5

职务:将文件(record.txt)中的数据实行剪切并服从以下规律保存起来:

  原因分析:
 
 因为boy,girl,count多少个变量是做为split_file()函数的有的变量,当把它们放在split_file()里面包车型客车时候,是对二个变量举行了起始化。
 
 不过当你把它们放到上面save_file()函数里面包车型地铁时候,就是在save_file()函数里面重新定义了七个名叫boy,
girl,count的变量,
 
 那么它和split_file()函数里面包车型地铁变量是一点壹滴未有涉嫌的。

pickle.dump(obj, file, [,protocol])
  表明:将对象obj保存到文件file中去。
     protocol为连串化使用的合计版本,0:ASCII协议,所类别化的目的使用可打字与印刷的ASCII码表示;一:老式的二进制协议;二:二.三版本引进的新2进制协议,较原先的更火速。在那之中协议0和一包容老版本的python。protocol暗许值为0。
     file:对象保存到的类公事对象。file必须有write()接口, file能够是二个以’w’格局张开的文件可能1个StringIO对象或然其余任何完成write()接口的目的。要是protocol>=1,文件对象需求是贰进制情势打开的。

 说了那般多,接下去有道标题很有意思。尝试着去达成吧^-^

(一)小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”)

 

二、下面是从文件内读取刚刚保存的列表:

职务:将文件(record.txt)中的数据举办私分并根据以下规律保存起来:
小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”)
小客服的对话单独保存为girl_*.txt的文件(去掉“小客服:”)
文件中累计有叁段对话,分别保存为boy_1.txt, girl_1.txt,boy_2.txt,
girl_2.txt, boy_3.txt,
gril_三.txt共多少个文件(提醒:文件中差异的对话间业已选拔“==========”分割)

(二)小客服的对话单独保存为girl_*.txt的文件(去掉“小客服:”)

澳门葡京备用网址 6

record.txt文件内容如下:

(三)文件中累计有叁段对话,分别保存为boy_1.txt,
girl_1.txt,boy_2.txt, girl_澳门葡京备用网址 ,2.txt, boy_3.txt,
gril_三.txt共多少个文件(提示:文件中差异的对话间业已选用“==========”分割)

仍然是以二进制格局读取文件(rb)

小客服:小甲鱼,今天有客户问你有没有女朋友?
小甲鱼:咦??
小客服:我跟她说你有女朋友了!
小甲鱼:。。。。。。
小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~"
小甲鱼:然后呢?
小客服:她买了两个,说发一个货就好~
小甲鱼:呃。。。。。。你真牛!
小客服:那是,谁让我是鱼C最可爱小客服嘛~
小甲鱼:下次有人想调戏你我不阻止~
小客服:滚!!!
================================================================================
小客服:小甲鱼,有个好评很好笑哈。
小甲鱼:哦?
小客服:"有了小甲鱼,以后妈妈再也不用担心我的学习了~"
小甲鱼:哈哈哈,我看到丫,我还发微博了呢~
小客服:嗯嗯,我看了你的微博丫~
小甲鱼:哟西~
小客服:那个有条回复“左手拿著小甲魚,右手拿著打火機,哪裡不會點哪裡,so easy ^_^”
小甲鱼:T_T
================================================================================
小客服:小甲鱼,今天一个会员想找你
小甲鱼:哦?什么事?
小客服:他说你一个学生月薪已经超过12k了!!
小甲鱼:哪里的?
小客服:上海的
小甲鱼:那正常,哪家公司?
小客服:他没说呀。
小甲鱼:哦
小客服:老大,为什么我工资那么低啊??是时候涨涨工资了!!
小甲鱼:啊,你说什么?我在外边呢,这里好吵吖。。。。。。
小客服:滚!!!
f = open('record.txt')

boy = []
girl = []
count = 1

for each_line in f:
    if each_line[:6] != '======':
        (role, line_spoken) = each_line.split(':', 1)
        if role == '小甲鱼':
            boy.append(line_spoken)
        if role == '小客服':
            girl.append(line_spoken)
    else:
        file_name_boy = 'boy_' + str(count) + '.txt'
        file_name_girl = 'girl_' + str(count) + '.txt'

        boy_file = open(file_name_boy, 'w')
        girl_file = open(file_name_girl, 'w')

        boy_file.writelines(boy)
        girl_file.writelines(girl)

        boy_file.close()
        girl_file.close()

        boy = []
        girl = []
        count += 1

file_name_boy = 'boy_' + str(count) + '.txt'
file_name_girl = 'girl_' + str(count) + '.txt'

boy_file = open(file_name_boy, 'w')
girl_file = open(file_name_girl, 'w')

boy_file.writelines(boy)
girl_file.writelines(girl)

boy_file.close()
girl_file.close()

f.close()

pickle.load(file)
  评释:从file中读取二个字符串,并将它重构为原本的python对象。
  file:类公事对象,有read()和readline()接口。

上述即为文件内容,尝试着写出地点的代码吧,答案如下:

骨子里能够动用函数封装得越来越美观些:

 

#coding=utf-8
def writefile(girl_list,boy_list,count):

    girl_file = open(r'D:\girl_'+ str(count) +'.txt','w')

    boy_file = open(r'D:\boy_'+ str(count) +'.txt','w')
    girl_file.writelines(girl_list)
    boy_file.writelines(boy_list)


    girl_file.close()
    boy_file.close()

def split_file():
    boy_list = []
    girl_list = []
    count = 1
    f = open(r'D:\record.txt')

    for each_line in f:
        if each_line[:6] != '======':
            (name,content) = each_line.split(':',1)
            if name == '小客服':
                girl_list.append(each_line)

            else:
                boy_list.append(each_line)


        else:
            writefile(girl_list,boy_list,count)
            boy_list.clear()
            girl_list.clear()
            count += 1
    writefile(girl_list,boy_list,count)
    f.close()

split_file()
def save_file(boy, girl, count):
    file_name_boy = 'boy_' + str(count) + '.txt'
    file_name_girl = 'girl_' + str(count) + '.txt'

    boy_file = open(file_name_boy, 'w')
    girl_file = open(file_name_girl, 'w')

    boy_file.writelines(boy)
    girl_file.writelines(girl)

    boy_file.close()
    girl_file.close()


def split_file(file_name):
    f = open('record.txt')

    boy = []
    girl = []
    count = 1

    for each_line in f:
        if each_line[:6] != '======':
            (role, line_spoken) = each_line.split(':', 1)
            if role == '小甲鱼':
                boy.append(line_spoken)
            if role == '小客服':
                girl.append(line_spoken)
        else:
            save_file(boy, girl, count)

            boy = []
            girl = []
            count += 1

    save_file(boy, girl, count)

    f.close()


split_file('record.txt')

演习题:将文件(record.txt)中的数据运用pickle将文件分割成分裂文件:

 上边的代码只是私家写的而已,记住代码的写法未有最佳,唯有更加好,努力优化本人的代码吧。好了,介绍了文件的主干读写,那么接下去就应有介绍下相对应的文件系统了。

 

小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”)
小客服的对话单独保存为girl_*.txt的文件(去掉“小客服:”)
文件中总共有3段对话,分别保存为boy_1.txt, girl_1.txt,boy_2.txt,
girl_2.txt, boy_3.txt,
gril_三.txt共四个文本(提醒:文件中差异的对话间1度接纳“==========”分割)

澳门葡京备用网址 7

*******************************

record.txt文件内容如下:

 我们千万不要烦恼,沉住气看完,看完后笔者会在末端留几道题加强我们学习,一齐努力吧!

二、课时29课后习题及答案

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
小客服:小甲鱼,今天有客户问你有没有女朋友?
小甲鱼:咦??
小客服:我跟她说你有女朋友了!
小甲鱼:。。。。。。
小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~"
小甲鱼:然后呢?
小客服:她买了两个,说发一个货就好~
小甲鱼:呃。。。。。。你真牛!
小客服:那是,谁让我是鱼C最可爱小客服嘛~
小甲鱼:下次有人想调戏你我不阻止~
小客服:滚!!!
================================================================================
小客服:小甲鱼,有个好评很好笑哈。
小甲鱼:哦?
小客服:"有了小甲鱼,以后妈妈再也不用担心我的学习了~"
小甲鱼:哈哈哈,我看到丫,我还发微博了呢~
小客服:嗯嗯,我看了你的微博丫~
小甲鱼:哟西~
小客服:那个有条回复“左手拿著小甲魚,右手拿著打火機,哪裡不會點哪裡,so easy ^_^”
小甲鱼:T_T
================================================================================
小客服:小甲鱼,今天一个会员想找你
小甲鱼:哦?什么事?
小客服:他说你一个学生月薪已经超过12k了!!
小甲鱼:哪里的?
小客服:上海的
小甲鱼:那正常,哪家公司?
小客服:他没说呀。
小甲鱼:哦
小客服:老大,为什么我工资那么低啊??是时候涨涨工资了!!
小甲鱼:啊,你说什么?我在外边呢,这里好吵吖。。。。。。
小客服:滚!!!

澳门葡京备用网址 8

*******************************

上述即为文件内容,尝试着写出地点的代码吧,答案如下:

 

澳门葡京备用网址 9

澳门葡京备用网址 10

顺便多少个难题,大家能够完结下看看,最终叁个不怎么有点复杂:

澳门葡京备用网址 11

#coding=utf-8
def writefile(girl_list,boy_list,count):

    girl_file = open(r'D:\girl_'+ str(count) +'.txt','wb')

    boy_file = open(r'D:\boy_'+ str(count) +'.txt','wb')
    girl_file.dump(girl_list,girl_file)
    boy_file.dump(boy_list,boy_file)


    girl_file.close()
    boy_file.close()

def split_file(file_name):
    boy_list = []
    girl_list = []
    count = 1
    f = open(file_name)

    for each_line in f:
        if each_line[:6] != '======':
            (name,content) = each_line.split(':',1)
            if name == '小客服':
                girl_list.append(each_line)

            else:
                boy_list.append(each_line)


        else:
            writefile(girl_list,boy_list,count)
            boy_list.clear()
            girl_list.clear()
            count += 1
    writefile(girl_list,boy_list,count)
    f.close()

split_file('D:\\record.txt')

一、编写三个程序,总括目录下各类文件类型的文书数;

澳门葡京备用网址 12

 

澳门葡京备用网址 13

二、编写2个顺序,用户输入文件名以及早先物色的门路,搜索该文件是或不是存在,如遇上文件夹则跻身文件夹继续寻找。

澳门葡京备用网址 14

 

澳门葡京备用网址 15

三、编写一个顺序,用户输加入关贸总协定组织键字,查找当前文件夹内(若是当前文件夹内涵盖文件夹则跻身文件夹继续查找)全体含有该重大字的文件文件(.txt后缀),须求出示该公文所在的岗位以及重点字在文件中的具体地点(第几行第多少个字符)

澳门葡京备用网址 16

 

澳门葡京备用网址 17

 

澳门葡京备用网址 18

答案:

澳门葡京备用网址 19

第3题答案:

澳门葡京备用网址 20

#coding=utf-8
#1:编写一个程序,统计当前目录下每个文件类型的文件数

import os
import os.path as op

def file_num(mulu_role='D:\\'):
    file_houzhui = []
    filejia_count = 0
    for wenjian in os.listdir(mulu_role):
        file_luji = op.join(mulu_role,wenjian)
        print(wenjian)
        if  op.isdir(file_luji):
            filejia_count += 1
        else:
            (filename_first,filename_last) = op.splitext(wenjian)
            file_houzhui.append(filename_last)
    if filejia_count >= 1:
        print('该文件下共有类型为【文件夹】的文件 %d个' %(filejia_count))
    houzhui = list(set(file_houzhui))
    for file_leixing in houzhui:
        file_count = file_houzhui.count(file_leixing)
        print('该文件下共有类型为【%s】的文件 %d个' %(file_leixing,file_count))

mulu_role = input('请输入你想查询的目录(默认D盘):')

file_num(mulu_role)

澳门葡京备用网址 21

 

澳门葡京备用网址 22

第壹题答案:

 

#coding=utf-8
import os


def search_file(start_dir,target):
    os.chdir(start_dir)

    for each_file in os.listdir(os.curdir) :
        if each_file == target:
            print(os.getcwd()  + os.sep + each_file) #sep是路径分隔符
        if os.path.isdir(each_file):
            search_file(each_file,target) #递归调用
            os.chdir(os.pardir) #递归调用后返回上一层目录


start_dir = input('请输入要查询的初始目录:')
target = input('请输入需要查找的目标文件:')
search_file(start_dir,target)

 

其叁题答案:

#coding=utf-8

import os

def print_pos(key_dict):
    keys = key_dict.keys()
    keys = sorted(keys) #由于字典是无序的,这里对行数进行排序
    for each_key in kyes:
        print('关键字出现在第 %s 行,第 %s 个位置。'%(each_key,str(key_dict[each_key])))

def pos_in_line(line,key):
    pos = []
    begin = line.find(key)
    while begin != -1:
        pos.append(begin + 1) #用户的角度从1开始数
        begin = line.find(key,begin+1) #从下一个位置继续查找

    return pos

def search_in_file(file_name,key):
    f = open(file_name)
    count = 0 #记录行数
    key_dict = dict() #用户存放key所在具体行数对应具体位置

    for each_line in f:
        count += 1
        if key in each_line:
            pos = pos_in_line(each_line,key) #key每行对应的位置
            key_dict[count] = pos

    f.close()
    return key_dict


def search_files(key,detail):
    all_files = os.walk(os.getcwd())
    txt_files = []

    for i in all_files:
        for each_file in i[2]:
            if os.path.splitext(each_file)[1] == '.txt': #根据后缀判断是否文本文件
                each_file = os.path.join(i[0],each_file)
                txt_files.append(each_file)

    for each_txt_file in txt_files:
        key_dict = search_in_file(each_txt_file,key)
        if key_dict:
            print('=================================================')
            print('在文件【%s】中找到关键字【%s】'%(each_txt_file,key))
            if detail in ['YES','Yes','yes']:
                print_pos(key_dict)


key = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
detail = input('请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):'%key)
search_files(key,detail)

注脚:该文书档案的图形来源于鱼C职业室的摄像,地址为:

  

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website