• Python学习小组课程P2-Python基础(2)文件操作


    一、前言

    注意:此为内部小组学习资料,非售卖品,仅供学习参考。
    本系列课程:
    Python学习小组课程-课程大纲与Python开发环境安装
    Python学习小组课程P1-Python基础(1)语法与数组
    Python学习小组课程P2-Python基础(2)文件操作
    Python学习小组课程P3-Python爬虫(1)HTML与Json解析
    Python学习小组课程P4-Python办公(1)Excel保存
    Python学习小组课程P5-Python办公(2)Excel读取与Word生成
    Python学习小组课程P6-Python办公(3)邮件与钉钉消息通知
    相关文件下载:
    链接: https://pan.baidu.com/s/18RiXNEul-Jin5ZNNjZDT4Q 提取码: xbhs

    二、知识点

    2.0 字符串操作

    知识点:换行符、字符串替换、字符串分割

    #字符串换行符
    str='抗蓝光、小灯泡\n神仙水、特润100'
    print(str)
    print('#'*50)
    
    #字符串替换
    str=str.replace('\n','、')
    print(str)
    print('#'*50)
    
    #字符串截取
    print(str[4:7])
    print('#'*50)
    
    #字符串分割
    str_list=str.split('、')
    print(str_list)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    抗蓝光、小灯泡
    神仙水、特润100
    ##################################################
    抗蓝光、小灯泡、神仙水、特润100
    ##################################################
    小灯泡
    ##################################################
    ['抗蓝光', '小灯泡', '神仙水', '特润100']
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.1 从文件读取商品价格

    知识点:文件读取、换行符、字符串替换、字符串分割

    f=open("P2.1_data/goods_price.txt", "r", encoding='UTF-8')
    
    list=[]
    while True:
        line = f.readline()
        if line:
            line=line.replace('\n','') #替换末尾的换行符号
            print(line) 
            list.append(line.split(',')) #逗号分隔
        else:
            break
    f.close()
    
    print(list)
    
    list=sorted(list,key=lambda x:int(x[1]),reverse=True)
    print(list)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    小灯泡,750
    抗蓝光,185
    神仙水,580
    特润100,420
    [['小灯泡', '750'], ['抗蓝光', '185'], ['神仙水', '580'], ['特润100', '420']]
    [['小灯泡', '750'], ['神仙水', '580'], ['特润100', '420'], ['抗蓝光', '185']]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.2 从文件读取商品价格,计算最低价、最高价、平均价

    知识点:文件读取、min、max、sum、len函数

    f=open("P2.2_data/goods_price.txt", "r", encoding='UTF-8')
    
    list=[]
    while True:
        line = f.readline()
        if line:
            line=line.replace('\n','') #替换末尾的换行符号
            price=int(line.split(',')[1]) #逗号分隔
            list.append(price)
        else:
            break
    f.close()
    
    print('最低价:',min(list))
    
    print('最高价:',max(list))
    
    print('平均价:',sum(list)/len(list))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    最低价: 740
    最高价: 760
    平均价: 750.0
    
    • 1
    • 2
    • 3

    2.3 统计报价数最多的商品

    知识点:文件读取、字典

    a={}
    # key value 键值对
    a['小明']=5
    a['小红']=3
    
    print(a)
    
    a['小明']+=1
    print(a)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
      {'小明': 5, '小红': 3}
      {'小明': 6, '小红': 3}
    
    • 1
    • 2
    f=open("P2.3_data/goods_price.txt", "r", encoding='UTF-8')
    
    goods={}
    while True:
        line = f.readline()
        if line:
            line=line.replace('\n','') #替换末尾的换行符号
            goods_name=line.split(',')[0] #逗号分隔
    
            if goods_name not in goods:
                goods[goods_name]=1
            else:
                goods[goods_name]+=1
        else:
            break
    f.close()
    
    print(goods)
    
    goods=sorted(goods.items(),key=lambda x:x[1],reverse=True)
    print(goods)
    print(goods[0])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    {'抗蓝光': 4, '小灯泡': 7, '神仙水': 2, '特润100': 2}
    [('小灯泡', 7), ('抗蓝光', 4), ('神仙水', 2), ('特润100', 2)]
    ('小灯泡', 7)
    
    • 1
    • 2
    • 3

    2.4 列出指定目录下的所有txt文件并合并

    知识点:目录列举、文件读取

    扩展:软件著作权申请中的源码合并功能

    import os
    
    path='P2.4_data/'
    files=os.listdir(path)
    
    content=''
    for file_name in files:
        if os.path.isfile(path+file_name) and file_name.endswith('.txt'):
            print(f'读取{file_name}...')
            with open(path+file_name, "r", encoding='UTF-8') as f:
                str=f.read()
                content=content+str
                print('读取完毕')
    
    out_file=f"{path}生成目录/content.txt"
    with open(out_file, "w+", encoding='UTF-8') as f:
        print(f'写入{out_file}...')
        f.write(content)
        print('写入完毕')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    读取1.txt...
    读取完毕
    读取2.txt...
    读取完毕
    读取3.txt...
    读取完毕
    写入P2.4_data/生成目录/content.txt...
    写入完毕
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2.5 文件分类

    知识点:目录列举、文件移动、后缀名获取

    import os
    import shutil
    
    path='P2.5_data/'
    files=os.listdir(path)
    
    for file_name in files:
        if os.path.isfile(path+file_name):
    
            #获取后缀名
            ext=os.path.splitext(file_name)[1].replace('.','')
    
            #目录不存在则创建
            if not os.path.exists(path+ext):
                os.mkdir(path+ext)
    
            #移动文件
            print(path+file_name,'->',path+ext+'/'+file_name)
            shutil.move(path+file_name,path+ext+'/'+file_name)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    P2.5_data/1.jpg -> P2.5_data/jpg/1.jpg
    P2.5_data/1.txt -> P2.5_data/txt/1.txt
    P2.5_data/2.avi -> P2.5_data/avi/2.avi
    P2.5_data/2.jpg -> P2.5_data/jpg/2.jpg
    P2.5_data/2.txt -> P2.5_data/txt/2.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    数据库简史:多主数据库架构的由来和华为参天引擎的机遇
    ZULL图解+代码 ZuulFilter执行顺序
    Unity Android 加载StreamingAssets路径下资源
    个推TechDay直播回顾 | 分享基于Flink的实时数仓搭建秘诀 附课件下载
    同名在线查询系统微信小程序源码下载支持多种流量主
    C语言判断一个数转二进制的某位是1或者0
    【LeetCode-139】单词拆分(回溯&动归)
    Python | 机器学习之PCA降维
    kobs-ng 编译使用
    Java代码沙箱
  • 原文地址:https://blog.csdn.net/Leytton/article/details/127765163