文件复制工具,可以用于做文件备份。用于日常的更新部署
import os, shutil, time
import configparser
def main():
root_dir = os.path.split(os.path.realpath(__file__))[0]# 获取当前文件所在目录的上一级目录,即项目所在目录
configPath = os.path.join(root_dir, "config.txt")
cf = configparser.ConfigParser()
cf.read(configPath,"utf-8") # 拼接得到config.txt文件的路径,直接使用
# 数据库服务器信息
file_path = cf.get("Copy-Config", "file_path") # 源文件夹
target_path = cf.get("Copy-Config", "target_path") # 目标文件夹
# 挑选需要复制的文件
file_list = choose_file(file_path,target_path)
# 复制文件
if len(file_list) > 0:
copy_file(file_list,file_path,target_path)
os.system('cls')
print('\n操作完成~\n')
isOpen()
# 是否需要启动程序
def isOpen():
while True:
menu = {
"1": "进入程序",
"2": "退出此程序",
}
for k, v in menu.items():
print(f"{k}、{v}")
Your_input = input("请您选择:".strip()).upper()
if Your_input == "1":
main()
elif Your_input == "2":
print("欢迎您再次使用,再见~")
sys.exit()
else:
print("请您选择(1/2)")
#递归全文件复制
def copyAll(src, target,filter_folder):
if os.path.isdir(src) and os.path.isdir(target):
filelist = os.listdir(src)
for file in filelist:
# 判断是否为文件夹
path = os.path.join(src, file)
if os.path.isdir(path):
# 如果符合需要过滤的文件夹名,则跳过
if(file in filter_folder):
continue
path1 = os.path.join(target, file)
if not os.path.isdir(path1):
os.mkdir(path1)
copyAll(path, path1,filter_folder)
else:
with open(path, 'rb') as rsteam:
cotiner = rsteam.read()
path = os.path.join(target, file)
with open(path, 'wb') as wsteam:
wsteam.write(cotiner)
else:
print('')
def choose_file(path,target):
"""
选择需要的文件
:param path:文件路径
:return:被选中的文件名
"""
file_list = []
list_dir = os.listdir(path)
for i in range(len(list_dir)): # 遍历目标文件夹下的所有文件
print('[{}]----{}\n'.format(i, list_dir[i]))
menu = {
"1": "通过序号选择指定文件",
"2": "指定文件后缀",
"3": "指定文件名前缀",
"4": "全部文件"
}
for k, v in menu.items():
print(f"{k}、{v}")
Your_input = input("请您选择:".strip()).upper()
if Your_input == "1":
# 输入序号选择需要的文件
file_code = input('请输入序号选择文件(分隔符“,”):').split(',')
file_list = [list_dir[int(i)] for i in file_code]
elif Your_input == "2":
# 输入文件后缀选择需要的文件
file_type = input('请输入文件后缀(分隔符“,”):').split(',')
for i in range(len(list_dir)):
if os.path.splitext(list_dir[i])[-1][1:] in file_type:
file_list.append(list_dir[i])
elif Your_input == "3":
# 输入文件名前缀选择需要的文件
file_name = input('文件名前缀:')
for i in range(len(list_dir)):
if file_name in os.path.splitext(list_dir[i])[0]:
file_list.append(list_dir[i])
elif Your_input == "4":
filter_folder = []
isFilter = input('是否需要过滤指定文件夹:(Y/N)')
if(isFilter.upper() == "Y"):
filter_folder = input('请输入需要过滤的文件夹名(分隔符“,”):').split(',')
# 复制全部文件
copyAll(path,target,filter_folder)
return file_list
def copy_file(file_list, source, target):
"""
批量复制文件到指定目录
:param file_list: 需要复制的文件列表
:param source: 文件源目录
:param target: 目的地目录
"""
os.chdir(source)
for file in file_list:
shutil.copy(file, target) # 复制文件到指定目录
print('复制成功, 文件夹中有{}个文件'.format(len(file_list)))
print("#########################################\n")
os.chdir(target)
time.sleep(2)
if __name__ == '__main__':
# 检测文件目录
main()
配置文件: