动动手
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)