小甲鱼《零基础学习Python》课后笔记(三十):文件系统——介绍一个高大上的东西

动动手
0.编写一个程序,统计当前目录下每个文件类型的文件数,程序实现如图:

代码如下:

import os 
filename_list = os.listdir(os.curdir)
filetype_dict = dict()

for each_file in filename_list:
	if os.path.isdir(each_file):
		filetype_dict.setdefault('文件夹', 0)	# 如果键不存在于字典中,将会添加键并将值设为默认值
		filetype_dict['文件夹'] += 1
	else:
		file_type = os.path.splitext(each_file)[1]	#返回的是元组,第一个是文件名,第二个是扩展名
		filetype_dict.setdefault(file_type, 0)
		filetype_dict[file_type] += 1

for each_type in filetype_dict.keys():	
	print('该文件夹下共有类型为【%s】的文件%d个' % (each_type, filetype_dict[each_type]))

测试结果:

================== RESTART: I:\Python\小甲鱼\test003\test0.py ==================  
该文件夹下共有类型为【.mp3】的文件2个  
该文件夹下共有类型为【.txt】的文件2个  
该文件夹下共有类型为【.py】的文件1
1.编写一个程序,计算当前文件夹下所有文件的大小,程序实现如图:


代码如下:

import os
filename_list = os.listdir(os.curdir)
file_dict = dict()

for each_file in filename_list:
	file_size = os.path.getsize(each_file)
	file_dict.setdefault(each_file, file_size)

for each_file in file_dict.keys():
	print('%s【%d】Bytes' % (each_file, file_dict[each_file]))

测试结果:

================== RESTART: I:\Python\小甲鱼\test003\test0.py ==================  
Readme.mp3【5733532】Bytes  
something.txt【106】Bytes  
test0.py【292】Bytes  
听写1.mp3【992235】Bytes  
我.txt【122】Bytes  
2.编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如遇到文件夹,则进入文件夹继续搜索,程序实现如图:


代码如下:

import os

def search_file(search_dir, search_target):
	"查找目录下的文件并输出路径"
	os.chdir(search_dir)
	for each_file in os.listdir(os.curdir):
		if each_file == search_target:
			print(os.getcwd() + os.sep + each_file)
		if os.path.isdir(each_file):
			search_file(each_file, search_target)
			os.chdir(os.pardir)

search_dir = input('请输入待查找的初始目录:')
search_target = input('请输入需要查找的目标文件:')
search_file(search_dir, search_target)

测试结果:

1.	================== RESTART: I:\Python\小甲鱼\test003\test0.py ==================  
2.	请输入待查找的初始目录:K:\\图像  
3.	请输入需要查找的目标文件:9.png  
4.	K:\图像\9.png  
5.	K:\图像\新建文件夹\9.png  
6.	K:\图像\新建文件夹\新建文件夹\9.png 

3.编写一个程序,用户输入开始搜索的路径,查找该路径下(包含子文件夹)所有的视频格式文件(要求查找mp4,rmvb,avi的格式即可),并创建一个文件(vedioList.txt)存放找到的文件的路径,程序实现如图:


代码如下:

import os

def search_vedio(search_dir):
	"查找目录下的所有视频格式文件,并创建一个文件保存文件的路径"
	os.chdir(search_dir)
	for each_file in os.listdir(os.curdir):
		if os.path.splitext(each_file)[1] in file_type_list:
			file_name = os.getcwd() + os.sep + each_file + os.linesep
			file_list.append(file_name)
		if os.path.isdir(each_file):
			search_vedio(each_file)
			os.chdir(os.pardir)
			
file_type_list = ['.mp4', '.rmvb', '.avi', '.wmv']
file = open(os.getcwd() +os.sep + 'vedioList.txt', 'w')
file_list = []

search_dir = input('请输入待查找的初始目录:')
search_vedio(search_dir)
file.writelines(file_list)
file.close()
4.编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件(.txt后缀),要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符),程序实现如图:


代码如下:

import os


def print_pos(target_words_dict):
	keys = target_words_dict.keys()
	keys = sorted(keys)
	for each_key in keys:
		print('关键字出现在第%s行,第%s个位置。' % (each_key, str(target_words_dict[each_key])))


def pos_in_line(line, target_words):
	pos = []
	count = line.find(target_words)
	while count != -1:
		pos.append(count + 1)	#字符索引从0开始
		count = line.find(target_words, count + 1)	#从下一个位置开始查找


	return pos


def search_in_file(file_name, target_words):
	file = open(file_name)
	line_count = 0
	target_words_dict = dict()
	for each_line in file:
		line_count += 1
		if target_words in each_line:
			pos = pos_in_line(each_line, target_words)
			target_words_dict[line_count] = pos

	file.close()
	return target_words_dict


def search_words(target_words, option):
	files = os.walk(os.getcwd())
	target_files = []

	for each in files:
		for each_file in each[2]:
			if os.path.splitext(each_file)[1] == '.txt':
				each_file = os.path.join(each[0], each_file)
				target_files.append(each_file)

	for each in target_files:
		target_words_dict = search_in_file(each, target_words)
		if target_words_dict:
			print('==============================================')
			print('在文件【%s】中找到关键字【%s】' % (each, target_words))
			if option.upper() == 'YES':
				print_pos(target_words_dict)
	
target_words = input('请将该脚本放于待查找的文件夹内,请输入关键字:')
option = input('请问是否需要打印关键字【%s】在文件中的具体位置(YES/NO):')
search_words(target_words, option)
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值