小甲鱼《零基础学习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.编写一个程序,计算当前文件夹下所有文件的大小,程序实现如图: ![](https://img-blog.csdn.net/20180829233243506?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI0NTQ2MTM3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 代码如下: ```python 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]))

 <font face='黑体' size=4>测试结果:</font>
```python
================== 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.编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如遇到文件夹,则进入文件夹继续搜索,程序实现如图: ![](https://img-blog.csdn.net/20180829233256964?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI0NTQ2MTM3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 代码如下: ```python 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)

 <font face='黑体' size=4>测试结果:</font>

```python
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)存放找到的文件的路径,程序实现如图: ![](https://img-blog.csdn.net/20180829233514332?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI0NTQ2MTM3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)![](https://img-blog.csdn.net/20180829233329338?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI0NTQ2MTM3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70) 代码如下: ```python 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()


<font face='黑体' color=blue size=4>
4.编写一个程序,用户输入关键字,查找当前文件夹内(如果当前文件夹内包含文件夹,则进入文件夹继续搜索)所有含有该关键字的文本文件(.txt后缀),要求显示该文件所在的位置以及关键字在文件中的具体位置(第几行第几个字符),程序实现如图:
![](https://img-blog.csdn.net/20180829233344730?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzI0NTQ2MTM3/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
 <font face='黑体' size=4>代码如下:</font>
```python
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)

猜你喜欢

转载自blog.csdn.net/qq_24546137/article/details/82317751
今日推荐