在某个文件目录下,找到某个文件
非递归
# 连续在res⽂件夹内查找某个⽂件
import os
# 获取当前路径
cur_dir = os.path.dirname(os.path.abspath(__name__))
# 获取当前路径⽗⽬录
parent_dir = os.path.dirname(cur_dir)
# 定位到res⽂件夹
find_path = os.path.join(parent_dir, 'res')
while 1:
find_file_name = input(f"请提示你想在{find_path}中查找的文件名(q退出)\n")
if find_file_name=='q':
break
file_exists=False #表示是否存在
for item in os.listdir(find_path):
if item==find_file_name:
file_exists=True
break
if file_exists:
print("文件找到")
递归
这个是能查到所有的目录
# 连续在res⽂件夹内查找某个⽂件
import os
# 获取当前路径
cur_dir = os.path.dirname(os.path.abspath(__name__))
# 获取当前路径⽗⽬录
parent_dir = os.path.dirname(cur_dir)
# 定位到res⽂件夹
find_path, file_path = os.path.join(parent_dir, 'res'), None
while 1:
find_file_name = input(f"请提示你想在{find_path}中查找的文件名(q退出)\n")
if find_file_name == 'q':
break
file_exists = False # 表示是否存在
for root, dirs, files in os.walk(find_path):
for item in files:
if item == find_file_name:
file_exists = True
file_path = os.path.join(root, item)
break
if file_exists:
print("文件找到")
else:
print("没有找到")
3 根据⽂件后缀名查找⽂件
# 第⼀件事情, os.path.splitext() 中传⼊ item (⽂件名是 **.&&& 】)
# 这时,返回的结果是列表: ["**", ".&&&"]
# [1] 表示选择上⾯列表中,下标为 1 的元素,即选出 ".&&&"
# 第三件事情, lower() 函数将 ".&&&" 中的⼤写英⽂字⺟统⼀转为⼩写
# 这时的 extension 赋值的结果为 ".docx" ,字⺟是⼩写
import os
# 获取当前路径
cur_dir = os.path.dirname(os.path.abspath(__name__))
# 获取当前路径⽗⽬录
parent_dir = os.path.dirname(cur_dir)
extension_name = input(f"你想要查找哪写后缀名⽂件,不同⽂件类型间⽤,隔开(如xlsx,mp3等
tmp_extensions = extension_name.split(",")
extensions = ['.' + item for item in tmp_extensions]
found_files_count = 0
for item in os.listdir(os.path.join(parent_dir, 'res')):
extension = os.path.splitext(item)[1].lower()
if extension in extensions:
print(f"【找到⽂件】" + item)
found_files_count += 1
print(f"⼀共有{found_files_count}个⽂件")
4 递归移动到⽂件
import os
import shutil
source_folder_name = input("输⼊想要操作的⽂件夹:")
file_extension = input("输⼊想要复制⽂件后缀(格式为xlsx等)")
target_folder = input("输⼊移动到⽂件夹名称")
mv_files = []
for root, folders, files in os.walk(source_folder_name):
for cur_file in files:
if os.path.splitext(cur_file)[1] == '.' + file_extension:
mv_files.append(os.path.join(root, cur_file))
# 剪切这些⽂件
if input('你确定要移动吗?(y/n)') == 'y':
for cp_file in mv_files:
if os.path.exists(os.path.join(target_folder, os.path.basename(cp_file
continue
shutil.move(cp_file, target_folder)
print("Done")
5 递归复制⽂件
import os
import shutil
source_folder_name = input("输⼊想要操作的⽂件夹:")
file_extension = input("输⼊想要复制⽂件后缀(格式为xlsx等)")
target_folder = input("输⼊复制到⽂件夹名称")
cp_files = []
for root, folders, files in os.walk(source_folder_name):
for cur_file in files:
if os.path.splitext(cur_file)[1] == '.' + file_extension:
cp_files.append(os.path.join(root, cur_file))
# 复制这些⽂件
for cp_file in cp_files:
shutil.copy(cp_file, target_folder)
print("Done")
6 递归删除
import os
source_folder_name = input("输⼊想要操作的⽂件夹:")
file_extension = input("输⼊想要删除⽂件后缀(格式为xlsx等)")
del_files = []
for root, folders, files in os.walk(source_folder_name):
for cur_file in files:
if os.path.splitext(cur_file)[1] == '.' + file_extension:
del_files.append(os.path.join(root, cur_file))
# 删除这些⽂件
if input('你确定要删除吗?(y/n)') == 'y':
for cp_file in del_files:
os.remove(cp_file)
print("Done")
7 整理为模块
import os
import shutil
def copy_files(source_folder_name, target_folder, file_extension='xlsx'):
"""
批量复制指定后缀名的⽂件
:param source_folder_name:
:param target_folder:
:param file_extension:
:return:
"""
cp_files = []
for root, folders, files in os.walk(source_folder_name):
for cur_file in files:
if os.path.splitext(cur_file)[1] == '.' + file_extension:
cp_files.append(os.path.join(root, cur_file))
# 复制这些⽂件
for cp_file in cp_files:
shutil.copy(cp_file, target_folder)
print("Done")
def delete_files(source_folder_name, file_extension='xlsx'):
"""
批量删除指定后缀名的⽂件
:param source_folder_name:
:param file_extension:
:return:
"""
del_files = []
for root, folders, files in os.walk(source_folder_name):
for cur_file in files:
if os.path.splitext(cur_file)[1] == '.' + file_extension:
del_files.append(os.path.join(root, cur_file))
# 删除这些⽂件
for cp_file in del_files:
os.remove(cp_file)
print("Done")
def move_files(source_folder_name, target_folder, file_extension='xlsx'):
"""
批量移动指定后缀名的⽂件
:param source_folder_name:
:param target_folder:
:param file_extension:
:return:
"""
mv_files = []
for root, folders, files in os.walk(source_folder_name):
for cur_file in files:
if os.path.splitext(cur_file)[1] == '.' + file_extension:
mv_files.append(os.path.join(root, cur_file))
# 剪切这些⽂件
for cp_file in mv_files:
if os.path.exists(os.path.join(target_folder, os.path.basename(cp_file
continue
shutil.move(cp_file, target_folder)
print("Done")
def walk_to_find(find_path, find_file_name):
"""
路径find_path中递归查找⽂件find_file_name
:param find_path:
:param find_file_name:
:return:
"""
result_path = []
for root, dirs, files in os.walk(find_path):
for item in files:
if item == find_file_name:
file_path = os.path.join(root, item)
result_path.append(file_path)
if len(result_path) > 0:
print("找到⽂件")
print("\n".join(result_path))
else:
print("⽂件未找到")
return result_path
def find_extension(find_path, extension_name='xlsx,mp3'):
"""
递归查找指定后缀名的⽂件
:param find_path:
:param extension_name:
:return:
"""
tmp_extensions = extension_name.split(",")
extensions = ['.' + item for item in tmp_extensions]
result_path = []
for cur_dir, folders, files in os.walk(find_path):
for item in files:
extension = os.path.splitext(item)[1].lower()
if extension in extensions:
result_path.append(os.path.join(cur_dir, item))
if len(result_path) > 0:
print("\n".join(result_path))
else:
print("未找到")
def stat_file(folder_name):
"""
统计⽂件个数,⽂件夹个数
:param folder_name:
:return:
"""
file_count, folder_count = 0, 0
if folder_name:
for dir, folders, files in os.walk(folder_name):
file_count += len(files)
folder_count += len(folders)
print(f"{folder_name}⾥⼀共包括:{file_count}个⽂件, {folder_count}个⽂件夹
return file_count, folder_count
本文由博客一文多发平台 OpenWrite 发布!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。