前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >小甲鱼《零基础学习Python》课后笔记(三十):文件系统——介绍一个高大上的东西

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

作者头像
小火柴棒
发布2019-01-11 14:39:00
6740
发布2019-01-11 14:39:00
举报
文章被收录于专栏:石开之旅石开之旅

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

代码如下:

代码语言:javascript
复制
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]))

测试结果:

代码语言:javascript
复制
================== RESTART: I:\Python\小甲鱼\test003\test0.py ==================  
该文件夹下共有类型为【.mp3】的文件2个  
该文件夹下共有类型为【.txt】的文件2个  
该文件夹下共有类型为【.py】的文件1个  

1.编写一个程序,计算当前文件夹下所有文件的大小,程序实现如图:

代码如下:

代码语言:javascript
复制
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]))

测试结果:

代码语言:javascript
复制
================== 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.编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如遇到文件夹,则进入文件夹继续搜索,程序实现如图:

代码如下:

代码语言:javascript
复制
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)

测试结果:

代码语言:javascript
复制
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)存放找到的文件的路径,程序实现如图:

代码如下:

代码语言:javascript
复制
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后缀),要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符),程序实现如图:

代码如下:

代码语言:javascript
复制
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)
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年09月02日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档