Skip to content
Open

Log #11

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
Expand Up @@ -26,7 +26,7 @@

## 反馈

创作者对所有想到的特殊情况都进行了处理,并在程序中 **以提示的形式写明**,但大致仍不免有疏漏。如果遇到了一些未处理的问题,欢迎到对应版本的 release 页面的 issues 或 comments 分区反馈。
创作者对所有想到的特殊情况都进行了处理,并在程序中 **以提示的形式写明**,但大致仍不免有疏漏。如果遇到了一些未处理的问题,欢迎到 issues 或 comments 分区反馈。

此外,有任何建议,也都欢迎到 comments 中提出!我会尽可能完善!

Expand Down
6 changes: 5 additions & 1 deletion 设计.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# 文件管理 - 设计

## v1
## v1.0.0

### 1. 核心功能

Expand Down Expand Up @@ -197,3 +197,7 @@ def write_log(item: Path, target: Path, ts: str):
首先,要写一个模块 `file_manager.py` 用来整合两个操作模块,并提供外界操作方式,换句话说,也就是路由。提供 CLI 接口的方法可见 [`argparse`](https://docs.python.org/zh-cn/3/library/argparse.html#module-argparse) 教程(当然,依然建议看别的教程,官方教程写的让人头晕);而以 exe 形式运行的时候是没法写参数的,所以额外提供了一个命令菜单,用来指示操作。

合并用的主模块写完以后,要进行几遍测试。测试完毕之后,就可以打包成 .exe 文件了。该文件存在 dist 文件夹中。



##
43 changes: 43 additions & 0 deletions 项目总结.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# 项目总结

## 一、v1.0.0 的创作

### 1. 创作动机

虽然我不是学计算机的,而且科大的培养计划里面,大一的课程也不重专业课,只有作为全校计算机通修课程的《计算机程序设计》(实际上约等于 C 语言基础)和信息学院的专业基础课《数据结构及其算法》与此相关。本人这两门课学得也很垃圾,虽然数据结构混到了优秀,但是作业基本上是照课本抄的,实验基本是 AI 做的。假期顺便学了一点 Python,打算做一点真正能用的东西来做训练。再三思考之下决定模仿一些系统自带的分类功能,做一个自动分类小工具。不得不说 Python 的标准库是真的强大……同时也让我不免怀疑,以 C++ 的方式加上它庞大的标准库,学起来到底要多困难……

### 2. 设计流程

在做数据结构课程的实验时,我对如何做一个东西并没有特别清楚的认识,甚至一开始分不清楚一个项目的业务逻辑和数据结构本身的完成,导致设计得极为抽象且低效。而这次做这个工具,我的打算就是训练这方面的能力:拆分逻辑、逐项完成和测试、版本管理、处理问题。

大概的逻辑可以如下划分:

```
设计主要功能:
大致规划这些功能所需的数据结构(本例中,只需要线性结构,所以日志结构非常简单)
分别完成每一个功能:
将一个功能拆分为多个简单逻辑(可以直接写出代码的)
实现每个逻辑
独立测试
将多个功能串联起来,测试整体功能是否满足
修复和补充功能,重复上述部分步骤
串联起来,测试整体功能
修复、补充
```

- 一开始设计的只有分类功能,完成以后为其添加了预显示即将移动的文件并提供确认或取消的功能;

- 随后,考虑到移动多个文件的话,如果需要手动恢复不太容易,所以想要添加撤回功能,而这就需要日志;

- 一开始的日志是简单的“位置参数”形式,即 `时间 被移动文件的路径 移动后的文件路径`,后来考虑到可能后面要加上更多功能,日志里面可能要记录更多形式的东西,所以将此种日志改为了 json line 格式,每一行都注明了操作类型(虽然现在只有 "move" 一种);

- 随后设计了能一次性撤回任意批次或全部操作的撤回功能;
- 此时,主要功能已经完工,要进行一些使用上的优化和问题的修复。
- 首先是提供了初级的操控,使得 move_items.py 模块在作为脚本单独运行时可以由用户输入待整理的文件夹目录(此前是写死在代码中的 "D:/test/")
- 随后,为做成可执行文件进行准备,将原先写在 move_items.py 模块中的分类依据变成了“默认值”,如果存在配置文件,就不会调用 move_items.py 中的分类依据;如果不存在配置文件或其已损坏,就使用默认值。
- 之后,由于寻找程序所在目录在多个模块中都要用到,所以就单独放进了一个模块以供调用;而完善的分类依据实在是太长了,放在 move_items.py 模块中有点妨碍查看其真正重要的逻辑和功能,所以也放进了一个单独的模块中。
- 至此,基本没有我已经想到且想要加入的功能了。于是开始着手提供一个操控方式,也即 file_manager.py。一开始,只做了支持命令行参数的版本,但是发现可执行文件不支持这样的操作,所以又加入了直接以无参数方式运行时的操作界面。这个版本的可执行文件通过了测试,于是就直接发布了。

### 3. 收获与总结

这次亲手制作小工具的确很有收获。首先是做这种小项目的流程上,比之前要规范、高效了很多;其次在制作过程中,一边思考思路一边去学习可能用到的工具,对此也有了更多领悟。当然,具体是什么,我或许自己知道,但说不太清楚。