init
This commit is contained in:
parent
91bd148574
commit
23b29c4560
178
urls/README.md
Normal file
178
urls/README.md
Normal file
@ -0,0 +1,178 @@
|
||||
## 123盘AlistURL生成器
|
||||
|
||||
## 简介
|
||||
|
||||
`123盘AlistURL生成器`是一个用于生成文件URL链接的Python脚本。它可以递归地遍历目录及其子目录中的所有文件,根据文件路径、基础URL、子目录和最小文件大小生成URL链接,并将生成的URL链接保存到YAML文件中。生成的YAML文件格式化输出,支持自定义根文件夹名称。
|
||||
|
||||
## 名称
|
||||
|
||||
- 程序名称:123盘AlistURL生成器
|
||||
- 脚本文件名:main.py
|
||||
|
||||
## 功能特点
|
||||
|
||||
- 支持递归遍历目录及其子目录中的所有文件
|
||||
- 可以指定基础URL和子目录,生成的URL链接将包含这些信息
|
||||
- 可以指定最小文件大小,小于指定大小的文件将被排除
|
||||
- 生成的URL链接包含文件大小、时间戳和编码后的文件路径
|
||||
- 支持自然排序,确保文件按照合理的顺序排列
|
||||
- 输出链接格式化为YAML格式,子文件夹使用缩进表示层级关系
|
||||
- 支持自定义根文件夹名称
|
||||
|
||||
## 使用方法
|
||||
|
||||
1. 将脚本文件放置在要生成URL链接的目录中。
|
||||
|
||||
2. 打开命令行或终端,切换到脚本所在的目录。
|
||||
|
||||
3.
|
||||
|
||||
运行以下命令:
|
||||
|
||||
|
||||
|
||||
```
|
||||
sh
|
||||
python main.py [--dir <sub_directory>] [--output <output_file>] [--base-url <base_url>] [--min-size <min_size>] --rf <root_folder>
|
||||
```
|
||||
|
||||
|
||||
|
||||
## 参数说明
|
||||
|
||||
- `--dir`:指定生成文件URL的子目录(可选)。如果不指定,默认为空。
|
||||
- `--output`:指定输出文件名(默认为urls.yaml)。生成的YAML文件将保存到该文件中。
|
||||
- `--base-url`:指定生成文件URL的基础URL(默认为https://link.kite.kim/feng)。生成的URL链接将包含该基础URL。
|
||||
- `--min-size`:指定最小文件大小,以字节为单位(默认为128KB)。小于该大小的文件将被排除。
|
||||
- `--rf`:指定YAML输出的根文件夹名称(必选)。生成的YAML文件将以该名称作为根文件夹。
|
||||
|
||||
## 示例
|
||||
|
||||
假设当前目录结构如下:
|
||||
|
||||
```shell
|
||||
.
|
||||
├── dir1
|
||||
│ ├── file1.txt (200KB)
|
||||
│ └── file2.txt (50KB)
|
||||
├── dir2
|
||||
│ ├── file3.txt (300KB)
|
||||
│ └── file4.txt (100KB)
|
||||
└── main.py
|
||||
```
|
||||
|
||||
运行以下命令:
|
||||
|
||||
```bash
|
||||
sh
|
||||
python main.py --dir "subdir" --min-size 150000 --rf "八尾妖姬"
|
||||
```
|
||||
|
||||
生成的urls.yaml文件内容将类似于:
|
||||
|
||||
```python
|
||||
八尾妖姬:
|
||||
dir1:
|
||||
204800:1624761234:https://link.kite.kim/feng/subdir/dir1/file1.txt
|
||||
dir2:
|
||||
307200:1624761234:https://link.kite.kim/feng/subdir/dir2/file3.txt
|
||||
```
|
||||
|
||||
这个示例中,我们指定了子目录为"subdir",最小文件大小为150000字节(约150KB),并且指定了根文件夹名称为"八尾妖姬"。生成的URL链接包含了子目录、文件大小、时间戳和编码后的文件路径。小于150KB的文件(file2.txt和file4.txt)被排除在输出结果之外。
|
||||
|
||||
## 代码结构
|
||||
|
||||
## 自然排序函数
|
||||
|
||||
```python
|
||||
pythondef natural_sort_key(s):
|
||||
"""为了自然排序的辅助函数,将字符串中的数字部分转换成整数"""
|
||||
return [int(text) if text.isdigit() else text.lower() for text in re.split('([0-9]+)', s)]
|
||||
```
|
||||
|
||||
## 生成URL函数
|
||||
|
||||
```python
|
||||
pythondef generate_urls(file_paths, base_url, sub_directory, min_size):
|
||||
"""根据文件路径、基础URL、子目录和最小文件大小生成URL链接"""
|
||||
urls = {}
|
||||
if not base_url.endswith('/'):
|
||||
base_url += '/'
|
||||
if sub_directory and not sub_directory.endswith('/'):
|
||||
sub_directory += '/'
|
||||
current_timestamp = int(time.time()) # 移到循环外
|
||||
for path in sorted(file_paths, key=natural_sort_key):
|
||||
file_size_bytes = os.path.getsize(path)
|
||||
if file_size_bytes < min_size:
|
||||
continue
|
||||
relative_path = os.path.relpath(path, start='.')
|
||||
encoded_path = urllib.parse.quote(relative_path)
|
||||
url = f"{base_url}{sub_directory}{encoded_path}"
|
||||
dir_name = os.path.dirname(relative_path)
|
||||
if dir_name not in urls:
|
||||
urls[dir_name] = []
|
||||
urls[dir_name].append(f"{file_size_bytes}:{current_timestamp}:{url}")
|
||||
return urls
|
||||
```
|
||||
|
||||
## 保存URL函数
|
||||
|
||||
```python
|
||||
pythondef save_urls(urls, output_file, root_folder):
|
||||
"""将URL链接保存到YAML文件中"""
|
||||
with open(output_file, 'w', encoding='utf-8') as f:
|
||||
f.write(f"{root_folder}:\n")
|
||||
for dir_name, files in urls.items():
|
||||
if dir_name == '.':
|
||||
for file in files:
|
||||
f.write(f" {file}\n")
|
||||
else:
|
||||
f.write(f" {dir_name}:\n")
|
||||
for file in files:
|
||||
f.write(f" {file}\n")
|
||||
```
|
||||
|
||||
## 解析命令行参数
|
||||
|
||||
```python
|
||||
pythondef parse_arguments():
|
||||
"""解析命令行参数"""
|
||||
parser = argparse.ArgumentParser(description='Generate URLs from file names.')
|
||||
parser.add_argument('--dir', type=str, default='', help='Sub-directory for generating file URLs (optional)')
|
||||
parser.add_argument('--output', type=str, default='urls.yaml', help='Output file name (default: urls.yaml)')
|
||||
parser.add_argument('--base-url', type=str, default='https://link.kite.kim/feng', help='Base URL for generating file URLs (default: https://link.kite.kim/feng)')
|
||||
parser.add_argument('--min-size', type=int, default=128*1024, help='Minimum file size in bytes (default: 128KB)')
|
||||
parser.add_argument('--rf', type=str, required=True, help='Root folder name for YAML output')
|
||||
return parser.parse_args()
|
||||
```
|
||||
|
||||
## 递归列出文件
|
||||
|
||||
```python
|
||||
pythondef list_files_recursive(start_path='.', exclude_files=None):
|
||||
"""递归列出目录及其子目录中的所有文件,排除指定的文件"""
|
||||
if exclude_files is None:
|
||||
exclude_files = set()
|
||||
file_paths = []
|
||||
for root, dirs, files in os.walk(start_path):
|
||||
for file in files:
|
||||
if file not in exclude_files:
|
||||
file_paths.append(os.path.join(root, file))
|
||||
return file_paths
|
||||
```
|
||||
|
||||
## 主函数
|
||||
|
||||
```python
|
||||
pythondef main():
|
||||
args = parse_arguments()
|
||||
current_script = os.path.basename(__file__)
|
||||
exclude_files = {current_script} # 排除当前脚本文件
|
||||
file_paths = list_files_recursive('.', exclude_files)
|
||||
urls = generate_urls(file_paths, args.base_url, args.dir, args.min_size)
|
||||
save_urls(urls, args.output, args.rf)
|
||||
print(f"URL链接已保存到{args.output}")
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
```
|
Loading…
Reference in New Issue
Block a user