zoukankan      html  css  js  c++  java
  • 零基础学习python_文件(28-30课)

      本人小白一枚,随着现在对测试要求越来越高,动不动就要去会一门编程语言,没办法只能学习学习Python,今天看到几个月前还是菜鸟的人突然就已经能使用Python写简单系统了,没办法,虽然之前也简单学习过Python,但是还是怒了,最近一直再看鱼C工作室的Python教程,为啥看这个?没为啥,因为讲解没那么死板咯,于是乎就找这个视频来看看,唯一的缺点就是练习题要钱,坑~~~~没办法,没钱人家怎么继续玩下去呢,好了不说废话了,进入今天的主题,由于之前27课看过了,也没写博客,没办法只能从28课写起了,如果日后感觉还可以的话再补吧!注意:Python是3+版本的喔

      今天主要讲的是Python操作文件,大家想一下既然是文件那我们肯定要“打开”啊是不是,打开那英文单词是啥?Open对不对,没错啦,那打开啥呢?所以open后面是不是得加文件路径?没错,那接着文件打开了那你是想干嘛呢?(读、写?)所以,最基本的打开两个要素就来了呗,如下,一般open(‘文件路径’,‘打开方式’)这样既可,其余默认。

    如果我们open时打开模式不填写就代表只读,即为'r',来看一看下面,这么多种打开模式总有你喜欢的吧^-^

      哎呀呀,打开完文件后,那你想下我们要干嘛呢?读文件内容或者写东西进入文件对不?因此就有了下面方法,哎,专业术语叫文件对象方法,老记不住专业名称,你们可得记住哟!还有虽然Python有垃圾回收机制,但是我们编辑读取文件时,完成操作后记得关闭文件哟,不然突然断电那内存内的数据可是会不见的喔,因为我们编辑的时候是保存在内存的,只有关闭文件时才会保存到本地!

     说了这么多,接下来有道题目很好玩。尝试着去完成吧^-^

    任务:将文件(record.txt)中的数据进行分割并按照以下规律保存起来:
    小甲鱼的对话单独保存为boy_*.txt的文件(去掉“小甲鱼:”)
    小客服的对话单独保存为girl_*.txt的文件(去掉“小客服:”)
    文件中总共有三段对话,分别保存为boy_1.txt, girl_1.txt,boy_2.txt, girl_2.txt, boy_3.txt, gril_3.txt共6个文件(提示:文件中不同的对话间已经使用“==========”分割)

    record.txt文件内容如下:

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

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

    #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:oy_'+ 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:
    ecord.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()

     上面的代码只是个人写的而已,记住代码的写法没有最好,只有更好,努力优化自己的代码吧。好了,介绍了文件的基本读写,那么接下来就应该介绍下相对应的文件系统了。

     大家千万不要烦恼,沉住气看完,看完后我会在后面留几道题巩固大家学习,一起努力吧!

    附带几个题目,大家可以完成下看看,最后一个稍微有点复杂:

    1、编写一个程序,统计目录下每个文件类型的文件数;

    2、编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在,如遇到文件夹则进入文件夹继续搜索。

    3、编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹则进入文件夹继续搜索)所有含有该关键字的文本文件(.txt后缀),要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符)

    答案:

    第一题答案:

    #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)
        
        

    第二题答案:

    #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工作室的视频,地址为:http://blog.fishc.com/category/python。

      

  • 相关阅读:
    闲谈系列之一——数据库主键GUID
    一个简单通用权限管理系统,求各位帮忙看看
    php 计算指定年份的周总数与及第几周的开始日期和结束日期(从周一开始)
    创建虚拟机流程详细过程链接
    阿里云CDN加速设置
    sublime Text3 快捷键
    Linux命令(centos7)
    分布式数据库
    mysql 分区和分表
    Linux crontab 命令格式与详细例子
  • 原文地址:https://www.cnblogs.com/leixiaobai/p/7739897.html
Copyright © 2011-2022 走看看