Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# AssetIO
## AssetIO
TD技能学院第三期-Python基础课-期中作业

# 作业说明
Expand Down
Binary file added core/1.jpg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
55 changes: 55 additions & 0 deletions core/Td_TDC.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
# coding=utf-8
import os
import shutil
import sys
import AssetIO.core.Td_message as Td_message
import AssetIO.core.Td_filename as Td_filename
import AssetIO.core.zip_file as zipfile
import AssetIO.core.filrupdate as filrupdate
import AssetIO.core.singal_sender as singal_sender
"""
文件夹结构以列表存储
"""

project_name = "TDC/"
assert_Type = ["Cha", "Env", "Pro"]
# 初始化目标文件与原始文件的字典
new_old_name = {}
new_old_name_message = {}
# 获取记录的内容并打印
# 调用Td_message,获取对象
a = Td_message.FolderMessage()
# 对项目文件进行遍历操作
path1 = "D:/school/TdClass/AssetIO/example/project/Inbox"
a.foldertraver(path1)
# 打印输出
a.printMessage()
# 获取文件名、文件路径
filename, filepath = a.folderList()
# 获取键值对为目标文件原始文件的字典
new_old_name_message = Td_filename.create_new_old(assert_Type, filepath, project_name, path1)


def button(button):
if button == "GetFile":
# 获取目标文件与原始文件的字典 并按照文件夹结构创建文件夹
new_old_name = Td_filename.createfolder_newolddict(assert_Type, filepath, project_name, path1)
return "Get file Successful!!!"

elif button == "MakeZip":
# 将文件打包发回,发回时需要回归为甲方原有文件结构,并以代码执行时间为压缩包名称。
# 构建函数,传入参数(Td_filename的返回值),
# 将更改过的文件替换之前存在的,并改变为原有结构
# 对文件进行打包。并以执行时间为压缩包名称
zip_file = zipfile.ZipFile(path1)
for key, value in new_old_name_message.items():
zip_file.add_file(key, value)
return "The Zipfile has been created!!!"

elif button == "Update":
# 对文件进行更新
for key, value in new_old_name_message.items():
print(key, value)
filrupdate.backup(key, value)
return "Update Successful!!!"

81 changes: 81 additions & 0 deletions core/Td_filename.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# coding=utf-8
import shutil
import os
"""
将传入的源文件复制进入目标文件中,
将文件名首字母大写,并将其保存为格式{项目代号}{资产名}{资产类别}.ma
并返回一个字典,键为更改后的名字,值为更改前的名字
"D:/school/TdClass/AssetIO/example/project/TDC/Asset/Pro/Timer/EP01_Timer_pro.ma"
"""


# 创建字典,定义函数进行文件复制
def move_file(dec_path, new_name):
shutil.move(dec_path, new_name)


# 对源文件的路径进行处理,返回目标文件的路径,不对文件夹进行处理
def exec_filename(source_path, dec_path):
file_path, filename = os.path.split(dec_path)
filename_temp = file_path.split("/")
new_name = file_path + "/" + filename_temp[-4] + "_" + filename_temp[-1].capitalize() + "_" +\
filename_temp[-2].capitalize() + "." + filename.split(".")[-1]
return new_name, source_path


def execfoder_filename(source_path, dec_path):
shutil.copy(source_path, dec_path)
new_name, source_path = exec_filename(source_path, dec_path)
move_file(dec_path, new_name)
return new_name, source_path


def exception(dec_folder):
try:
os.makedirs(dec_folder)
except FileExistsError:
pass


def traverfile_changename(_type, filepath, project_name, position, new_old_name_message, path, lable):
for file in filepath[position]:
dec_folder = os.path.split(path)[0] + "/" + project_name + "Asset/" + _type + "/" + \
str(file.split("_")[-2]).capitalize()
if lable:
exception(dec_folder)
newname, oldname = execfoder_filename(file, dec_folder + "/" + file.split("/")[-1])
new_old_name_message[newname] = oldname
else:
newname, oldname = exec_filename(file, dec_folder + "/" + file.split("/")[-1])
new_old_name_message[newname] = oldname


# 返回一个新旧路径的字典 不创建文件夹
def create_new_old(assert_Type, filepath, project_name, path, lable=0):
new_old_name_message = {}
for _type in assert_Type:
# 将文件放入存好的文件夹中
if _type == "Pro":
traverfile_changename(_type, filepath, project_name, 2, new_old_name_message, path, lable)

elif _type == "Env":
traverfile_changename(_type, filepath, project_name, 1, new_old_name_message, path, lable)

elif _type == "Cha":
traverfile_changename(_type, filepath, project_name, 0, new_old_name_message, path, lable)
return new_old_name_message


# 返回一个新旧路径的字典 创建文件夹
def createfolder_newolddict(assert_Type, filepath, project_name, path):
new_old_name = {}
new_old_name = create_new_old(assert_Type, filepath, project_name, path, lable=1)
print("the file struct has created!!!")
return new_old_name


if __name__ == "__main__":
source = 'D:/school/TdClass/AssetIO/example/project/Inbox/20191001/EP01/timer/EP01_Timer_pro.ma'
dec = "D:/school/TdClass/AssetIO/example/project/TDC/Asset/Pro/Timer/EP01_Timer_pro.ma"
a, b = exec_filename(source, dec)
print("new: %s \nold: %s" % (a, b))
95 changes: 95 additions & 0 deletions core/Td_message.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
# coding=utf-8
import os
import re
import time
"""
#通过调用该函数来获取
#1.收到文件的时间:文件在本地创建的时间
#2.文件的数量
#3.文件的内容
# 打印示例
*************Message****************
收到文件时间:-dd -mm -yy
收到文件数量:xx
文件的内容:
角色:xx个,name1,name2
场景:xx个,name1,name2
道具:xx个,name1,name2
函数输出:文件名(列表),文件路径+含文件名(列表)
"""


class FolderMessage():

def __init__(self):
# 初始化文件夹路径,文件夹列表
self.path_name = [[], [], []]
self.file_name = []
self.numtotal = 0
self.chaname, self.envname, self.proname = [], [], []
self.messages = []

def foldertraver(self, path):
folders = os.listdir(path)
for folder in folders:
# 判断是否为文件夹
if os.path.isdir(path + "/" + str(folder)):
path = path + "/" + str(folder)
# folder = os.listdir(self.path)
self.foldertraver(path)

# 如果是文件夹则进行深层遍历
elif os.path.isdir(os.path.split(path)[0] + "/" + folder):
path = os.path.split(path)[0] + "/" + folder
self.foldertraver(path)

else:
self.numtotal += 1
self.addMessage(folder + ": " + time.ctime(os.path.getmtime(path + "/" + folder)))

# self.file_name.append(os.path.split(path)[0] + "\\" + folder)
if folder.split("_")[-1].split(".")[0] == "cha":
self.chaname.append(folder)
self.path_name[0].append(path + "/" + folder)
elif folder.split("_")[-1].split(".")[0] == "env":
self.envname.append(folder)
self.path_name[1].append(path + "/" + folder)
elif folder.split("_")[-1].split(".")[0] == "pro":
self.proname.append(folder)
self.path_name[2].append(path + "/" + folder)

def addMessage(self, message):
self.messages.append(message)

def folderList(self):
self.file_name.append(self.chaname)
self.file_name.append(self.envname)
self.file_name.append(self.proname)
return self.file_name, self.path_name

def printMessage(self):
print("*************Message****************\n************************************")
for message in self.messages:
print(message)
print("The file of the folder count is: %d" % self.numtotal)
print("The file include:")
print(" character: %d个" % len(self.chaname))
for charfile in self.chaname:
print(" " + charfile)
print(" env: %d个" % len(self.envname))
for envfile in self.envname:
print(" " + envfile)
print(" prop: %d个" % len(self.proname))
for propfile in self.proname:
print(" " + propfile)


if __name__ == "__main__":
a = FolderMessage()
a.foldertraver("D:/school/TdClass/AssetIO/example/project/Inbox")
# 文件输出
a.printMessage()
filename, filepath = a.folderList()
print(filename)
print(filepath)

Binary file added core/exit.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
45 changes: 45 additions & 0 deletions core/fileupdate.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
# coding=utf-8
import os
import shutil
import time
import hashlib
import AssetIO.core.Td_filename as Td_filename
"""
该函数被调用后,便会返回一个更新的路径列表
对比md5码,来找出被修改的文件
"""
New = "D:/school/TdClass/AssetIO/example/project/TDC/Asset/Pro/Timer/TDC_Timer_Pro.txt"
old = 'D:/school/TdClass/AssetIO/example/project/Inbox/20191001/EP01/timer/EP01_Timer_pro.txt'


def md5compare(newpath, oldpath):
try:
with open(newpath, "rb") as f:
data = f.read()
newmd5 = hashlib.md5(data).hexdigest()

with open(oldpath, "rb") as f:
data = f.read()
oldmd5 = hashlib.md5(data).hexdigest()
return newmd5 != oldmd5
except FileNotFoundError:
print("发现新文件:%s,正在复制...." %(oldpath.split("/")[-1]))
return True


def backup(newpath, oldpath):
if md5compare(newpath, oldpath):
back_file = os.path.split(newpath)[0] + "/" + os.path.split(newpath)[1].split(".")[0] + "_" + \
time.strftime("%Y-%m-%d %H-%M-%S") + "." + os.path.split(newpath)[1].split(".")[1]
try:
shutil.move(newpath, back_file)
except FileNotFoundError:
Td_filename.exception(os.path.split(newpath)[0])
shutil.copy(oldpath, newpath)
print("%s 更新成功"%(oldpath.split("/")[-1]))
else:
print("%s 无需更新!!"%(newpath.split("/")[-1]))


if __name__ == "__main__":
backup(New, old)
7 changes: 7 additions & 0 deletions core/readme.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
**************************************
***************使用说明**************
**************************************

mode1:将项目文件中按照乙方公司要求归类命名
mode2:将乙方文件打包至zip压缩文件
mode3:查看是否有资产更新,如有,则进行更新,源文件加时间后缀
62 changes: 62 additions & 0 deletions core/singal_sender.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
# coding=utf-8

import sys
import time
from PyQt5.QtWidgets import QMainWindow, QMessageBox, QWidget, QPushButton, QApplication
from PyQt5.QtGui import QIcon
import AssetIO.core.Td_TDC as Td_TDC


class Example(QMainWindow,QWidget):

def __init__(self):
super().__init__()

self.initUI()

def initUI(self):

btn1 = QPushButton("GetFile", self)
btn1.move(0, 50)

btn2 = QPushButton("MakeZip", self)
btn2.move(100, 50)

btn3 = QPushButton("Update", self)
btn3.move(0, 100)

btn4 = QPushButton("Quit", self)
btn4.move(100,100)

btn1.clicked.connect(self.buttonClicked)
btn2.clicked.connect(self.buttonClicked)
btn3.clicked.connect(self.buttonClicked)
btn4.clicked.connect(self.buttonClicked)

self.statusBar()

self.setGeometry(300, 300, 290, 150)
self.setWindowTitle("信号发送")
self.setWindowIcon(QIcon("1.jpg"))
self.show()

def buttonClicked(self):

sender = self.sender()
self.statusBar().showMessage("正在进行: " + sender.text() + "。 请稍后...")

reply = QMessageBox.question(self, "Message",
self.exec_resault(sender.text()))

def exec_resault(self, button):
print(button)
if button == "Quit":
exit()
self.a = Td_TDC.button(button)
return self.a


if __name__ == "__main__":
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
18 changes: 18 additions & 0 deletions core/update.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
**************************************
***************使用说明**************
**************************************

mode1:将项目文件中按照乙方公司要求归类命名
mode2:将乙方文件打包至zip压缩文件
mode3:查看是否有资产更新,如有,则进行更新,源文件加时间后缀

2019.10.05 15:22
1.添加了注释
2.将Td_filename.py中的代码进行整合。
3.更新文件时,添加了更新之前不存在的文件。
4.将代码中出现的路径用变量代替。
5.支持添加各种格式的文件

2019.10.05 21:18
1.采用按键来处理事件

Loading