【python办公自动化(1)】系统指定文件的查找--输出目录下所有文件及文件夹(文件的查找和字符串大小写问题延伸)

修改python运行路径

import os
os.chdir('C:/Users/86177/Desktop')
os.chdir(r'C:\Users\86177\Desktop') 
os.chdir('C:\\Users\\86177\\Desktop') 

路径加载连接的三种方式:’/’、 ‘\’ 、 r’’

获得当前python程序运行路径

import os
print(os.getcwd())

输出结果为:‘C:\Users\86177\Desktop’(当前程序在的路径)

python自动路径连接

import os
os.path.join('Myprojects', 'AI')

输出结果为:‘Myprojects\AI’(windows系统下)

绝对路径和相对路径

'C:\\Users\\86177\\Desktop' #绝对路径
'./practice' #相对路径

建议在进行项目时候新创建一个文件夹,将所有的.py文件放在一起,使用相对路径读取数据

列出当前程序文件夹下所有内容

import os
os.listdir()

默认返回的全部内容的一个列表,类似于全局的方法dir(),可以查看全部的内容

判断文件还是文件夹

import os
files = os.listdir()
for file in files:
    print(file, os.path.isdir(file))

结果输出:文件夹名称,False(不是文件夹) True(是文件夹)
在这里插入图片描述

★★★★★
上面的使用情形是在相对路径下面,如果是绝对路径,就需要补全全部的路径,比如运行的文件是在桌面,测试的内容是判断D盘里面的内容是文件还是文件夹,如下

可以看出,这种情况下,由于路径的问题,全部输出的都是False
在这里插入图片描述
修改代码,补全路径,如下:
在这里插入图片描述

推荐的使用方式

import os
for file in os.scandir():
    print(file.name, file.path, file.is_dir())

结果输出的是:文件夹名称,路径和是否是文件夹的判断

综合应用

编写一个python程序,示例文件夹内容如下,要求:

(1)找出当前目录下所有非文件夹的文件

(2)统计其中包含‘python’单词的文件数量

(3)不区分大小写,即大写和小写都包括在内

(4)输出文件数量
示例文件夹
参考代码如下:

import os 

os.chdir(r'D:\python_major\auto_office1')

ls_file = []
ls_dir = []
for file in os.scandir():
    if file.is_dir():
        ls_dir.append(file.name)
    else:
        ls_file.append(file.name)
print("文件夹的总量是{},\n文件为别为{}".format(len(ls_dir),ls_dir))
print('\n{}\n'.format('-'*30))

print("非文件夹的文件总量是{},\n文件为别为{}".format(len(ls_file),ls_file))
print('\n{}\n'.format('-'*30))

ls_python = []
for name in ls_file:
    if ('python' in name) or('Python'in name):
        ls_python.append(name)
print('含有python单词的文件数量有{}个,\n文件分别为{}'.format(len(ls_python),ls_python))

输出结果如下:
结果输出

扩展延伸(选读)

如果对于’Python’不区分大小写这句话的理解为:可以有任意的大小写字母组成python这个单词就可以,比如Python,输入法转换错误写成了pYTHON,或者PYthon,这个后再进行文件的数量筛选。

这里将示例的文件夹内容增加几个含有python的文件,如下:
示例文件夹内容
如果还使用上面的方式就显得笨重,推荐使用re库(正则表达式库,专门处理字符串数据),下面代码是基于以上代码,如下:

import re

ls_name = []
for name in ls_file:
    pat = '.*python.*'
    match = re.match(pat,name,re.I)
    #re.I代表不区分大小写
    try:
        ls_name.append(match.group())
    except:
        pass

print('含有python单词的文件数量有{}个,\n文件分别为{}'.format(len(ls_name),ls_name))

如果对于re库感兴趣可以自学,这里只做抛砖引玉,结果输出如下:
拓展内容结果输出
如果说要使用现有的知识进行这个问题的解答,有一种方式就是,将所有的字符全都化作统一,也就是不存在大小写(字符串的lower或者upper的方式),示例代码如下

ls = ['python_1.py','Python.py','1PYthon.doc','pyThon.xlsx','file.txt']

count = 0
data_ls = []
for item in ls:
	if 'python' in item.lower():
		count += 1
		data_ls.append(item)
print('含有python的文件共有{}个,分别为:\n\n{}'.format(count,data_ls))

结果输出如下:
在这里插入图片描述

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lys_828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值