鱼C论坛

 找回密码
 立即注册
查看: 917|回复: 3

第030讲:文件系统 ,课后作业

[复制链接]
发表于 2019-7-21 13:50:00 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
0、编写一个程序,统计当前目录下每个文件类型的文件数

———————————————————————————————————————————————————————————————

import os
x=input("请输入文件夹路径:")
print ("输出文件夹路径:",x)

os.chdir(x)
print ("列举当前目录下的文件名:",os.listdir(path='.'))

a=os.listdir(os.curdir)#相当于os.listdir(path='.'),表示当前文件夹下的所有文件,这样写更准确
print ("再次列举当前目录下的文件名:",a)
b=dict()#定义一个空字典,用来填充,各类型文件的数量

for e in a:#a是一个数组,定义 e 是 a 中的数值
    if os.path.isdir(e):
        # os.path.isdir 用来判断 e 是否是文件夹,os.path.isfile() 用来判断 e 是否是文件
        b.setdefault('文件夹', 0)#定义b的默认值,如果键不存在,则添加此键。跟get 类似
        b['文件夹'] += 1#文件夹键值加1
    else:#否则,e不是文件夹,而是文件的时候
        f = os.path.splitext(e)[1]
        #os.path.splitext 分离文件的文件名和扩展名,并将其保存在一个元组中,针对单个文件
        #f等于这个元组中的第二个元素,就是f 是扩展名
        b.setdefault(f,0)#重新定义一个新的默认值,如果没有就创建一个;如果有,就直接将其设为默认值即可
        b[f]+=1#每过一个文件,都需要重新指定一下默认值,然后将默认值加1
        print ("打印一下每一个文件分离后的样子,每一个文件都是一个元组:")
        print (os.path.splitext(e))

print ("打印一下文件夹中所有文件类型的数量:",b)#可以看到,b是一个字典
for c in b.keys():#c是b的键值
    print("该文件夹下共有类型为 【%s】 的文件 【%d】 个" % (c,b[c]))
    #注意这种写法,%s %d , 后边的 % (c,b[c]) ,%前边没有逗号,后边的数据都有小括号

———————————————————————————————————————————————————————————————
输出结果:

请输入文件夹路径:D:\python\s
输出文件夹路径: D:\python\s
列举当前目录下的文件名: ['01动动手.docx', 'a.txt', 'b.txt', '新建文件夹']
再次列举当前目录下的文件名: ['01动动手.docx', 'a.txt', 'b.txt', '新建文件夹']
打印一下每一个文件分离后的样子,每一个文件都是一个元组:
('01动动手', '.docx')
打印一下每一个文件分离后的样子,每一个文件都是一个元组:
('a', '.txt')
打印一下每一个文件分离后的样子,每一个文件都是一个元组:
('b', '.txt')
打印一下文件夹中所有文件类型的数量: {'.docx': 1, '.txt': 2, '文件夹': 1}
该文件夹下共有类型为 【.docx】 的文件 【1】 个
该文件夹下共有类型为 【.txt】 的文件 【2】 个
该文件夹下共有类型为 【文件夹】 的文件 【1】 个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-7-21 17:07:15 | 显示全部楼层
1、编写一个程序,计算当前文件夹下所有文件的大小
————————————————————————————————————————————————
import os
x=input("请输入文件夹路径:")
print ("输出文件夹路径:",x)

os.chdir(x)
a=os.listdir(os.curdir)#相当于os.listdir(path='.'),表示当前文件夹下的所有文件,这样写更准确
print ("列举当前目录下的文件名:",a)
b=dict()#定义一个空字典,用来填充,各文件的大小
d=0#可以用来求和,把所有文件大小相加
for e in a:
    if os.path.isfile(e):
        f = os.path.getsize(e)#os.path.getsize ,返回文件大小
        b[e]=f
        d+=f#可以用来求和,把所有文件大小相加,注意,位置不能错,就在这里

print ("打印各文件大小的字典:",b)
print("文件大小之和为:",d)

for c in b.keys():
    print("文件 【%s】 的大小是 【%d】" %(c,b[c]))
——————————————————————————————————————————————————————
请输入文件夹路径:D:\python\s
输出文件夹路径: D:\python\s
列举当前目录下的文件名: ['01动动手.docx', 'a.txt', 'b.txt', '新建文件夹']
打印各文件大小的字典: {'01动动手.docx': 109717, 'a.txt': 339, 'b.txt': 16}
文件大小之和为: 110072
文件 【01动动手.docx】 的大小是 【109717】
文件 【a.txt】 的大小是 【339】
文件 【b.txt】 的大小是 【16】
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-25 14:35:30 | 显示全部楼层
本帖最后由 wyft5t5 于 2019-7-25 14:37 编辑

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

import os

def s (a,b):#定义一个搜索函数,a代表路径,b代表文件
    os.chdir(a)#当前路径,跳转到a

    for e in os.listdir(os.curdir):#定义 e 是当前路径下的文件名 ,有两种可能
        if e==b:#当e等于输入的文件名时
            print(os.getcwd()+os.sep+e)#将e打印出来
            #os.getcwd(),当前路径 ; os.sep ,当前系统的路径分割符,windows下是\

        if os.path.isdir(e):#当e 是一个路径时
            s(e,b)# 对当前函数S进行递归调用
            os.chdir(os.pardir)#os.pardir代表上级目录,本命令代表跳转到上级目录

######## 上边部分是函数,下边部分是程序,调用函数 ###########

x=input("请输入需要查找的目录:")
y=input("请输入需要查找的文件:")

s(x,y)#没有def,调用函数s;x,y 就分别是里边的数值了

——————————————————————————————————————————————————————
请输入需要查找的目录:D:\sgmuserprofile\pnqgi6\Desktop\python
请输入需要查找的文件:a.txt
D:\sgmuserprofile\pnqgi6\Desktop\python\s\a.txt
D:\sgmuserprofile\pnqgi6\Desktop\python\s\b\d\e\a.txt
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-25 15:16:35 | 显示全部楼层
wyft5t5 发表于 2019-7-25 14:35
2. 编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如遇到文件夹,则进入文件夹继 ...

这样写程序更好一些,输入部分字符即可查找
————————————————————————————————————————————————
import os

def s (a,b):#定义一个搜索函数,a代表路径,b代表文件
    os.chdir(a)#当前路径,跳转到a

    for e in os.listdir(os.curdir):#定义 e 是当前路径下的文件名 ,有两种可能
        if b in e:#当e包含了输入的文件名时
            print(os.getcwd()+os.sep+e)#将e打印出来
            #os.getcwd(),当前路径 ; os.sep ,当前系统的路径分割符,windows下是\

        if os.path.isdir(e):#当e 是一个路径时
            s(e,b)# 对当前函数S进行递归调用
            os.chdir(os.pardir)#os.pardir代表上级目录,本命令代表跳转到上级目录

######## 上边部分是函数,下边部分是程序,调用函数 ###########

x=input("请输入需要查找的目录:")
y=input("请输入需要查找的文件:")

s(x,y)#没有def,调用函数s;x,y 就分别是里边的数值了

————————————————————————————————————————————

请输入需要查找的目录:D:\sgmuserprofile\pnqgi6\Desktop\python
请输入需要查找的文件:a
D:\sgmuserprofile\pnqgi6\Desktop\python\1.rar
D:\sgmuserprofile\pnqgi6\Desktop\python\s\a.txt
D:\sgmuserprofile\pnqgi6\Desktop\python\s\b\d\e\a.txt
D:\sgmuserprofile\pnqgi6\Desktop\python\while.rar
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-6-8 22:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表