|
@@ -1,17 +1,25 @@
|
|
|
# 处理115文件
|
|
# 处理115文件
|
|
|
-# python compare_files.py - -pan115 "115share_list.txt" "115share_list [tg].txt"
|
|
|
|
|
|
|
+# python compare_files.py --pan115 "115share_list.txt" "115share_list [tg].txt"
|
|
|
|
|
|
|
|
# 处理夸克文件
|
|
# 处理夸克文件
|
|
|
-# python compare_files.py - -quark "quarkshare_list.txt" "quarkshare_list [tg].txt"
|
|
|
|
|
|
|
+# python compare_files.py --quark "quarkshare_list.txt" "quarkshare_list [tg].txt"
|
|
|
|
|
|
|
|
# 同时处理两种文件
|
|
# 同时处理两种文件
|
|
|
-# python compare_files.py - -pan115 "115share_list.txt" "115share_list [tg].txt" - -quark "quarkshare_list.txt" "quarkshare_list [tg].txt"
|
|
|
|
|
|
|
+# python compare_files.py --pan115 "115share_list.txt" "115share_list [tg].txt" --quark "quarkshare_list.txt" "quarkshare_list [tg].txt"
|
|
|
import sys
|
|
import sys
|
|
|
|
|
+import os
|
|
|
import argparse
|
|
import argparse
|
|
|
|
|
|
|
|
def read_file(filename):
|
|
def read_file(filename):
|
|
|
- with open(filename, 'rb') as f:
|
|
|
|
|
- return f.read().decode('utf-8').splitlines()
|
|
|
|
|
|
|
+ try:
|
|
|
|
|
+ with open(filename, 'rb') as f:
|
|
|
|
|
+ return f.read().decode('utf-8').splitlines()
|
|
|
|
|
+ except UnicodeDecodeError:
|
|
|
|
|
+ print(f"文件 {filename} 编码错误,请确保是UTF-8编码")
|
|
|
|
|
+ sys.exit(1)
|
|
|
|
|
+ except Exception as e:
|
|
|
|
|
+ print(f"读取文件 {filename} 时出错: {e}")
|
|
|
|
|
+ sys.exit(1)
|
|
|
|
|
|
|
|
def get_share_type(filename):
|
|
def get_share_type(filename):
|
|
|
"""判断分享文件类型"""
|
|
"""判断分享文件类型"""
|
|
@@ -38,18 +46,23 @@ def extract_share_id(line, share_type):
|
|
|
parts = line.strip().split()
|
|
parts = line.strip().split()
|
|
|
if len(parts) >= 3:
|
|
if len(parts) >= 3:
|
|
|
if share_type == "115":
|
|
if share_type == "115":
|
|
|
- return parts[1] # 115格式:第二部分是分享ID
|
|
|
|
|
|
|
+ return parts[1].strip() # 115格式:第二部分是分享ID
|
|
|
elif share_type == "quark":
|
|
elif share_type == "quark":
|
|
|
- return f"{parts[1]}_{parts[2]}" # 夸克格式:第二和第三部分组合
|
|
|
|
|
|
|
+ return f"{parts[1].strip()}_{parts[2].strip()}" # 夸克格式:第二和第三部分组合
|
|
|
return None
|
|
return None
|
|
|
|
|
|
|
|
def get_category(line):
|
|
def get_category(line):
|
|
|
"""获取分类路径(第一个部分)"""
|
|
"""获取分类路径(第一个部分)"""
|
|
|
parts = line.strip().split()
|
|
parts = line.strip().split()
|
|
|
- return parts[0] if parts else ""
|
|
|
|
|
|
|
+ return parts[0].strip() if parts else ""
|
|
|
|
|
|
|
|
def merge_files(file1, file2):
|
|
def merge_files(file1, file2):
|
|
|
"""根据文件名判断类型并合并文件"""
|
|
"""根据文件名判断类型并合并文件"""
|
|
|
|
|
+ # 检查文件是否存在
|
|
|
|
|
+ for file in [file1, file2]:
|
|
|
|
|
+ if not os.path.exists(file):
|
|
|
|
|
+ raise FileNotFoundError(f"文件不存在: {file}")
|
|
|
|
|
+
|
|
|
# 判断并验证文件类型
|
|
# 判断并验证文件类型
|
|
|
share_type = verify_file_types(file1, file2)
|
|
share_type = verify_file_types(file1, file2)
|
|
|
output_prefix = f"merged_{share_type}"
|
|
output_prefix = f"merged_{share_type}"
|
|
@@ -57,6 +70,11 @@ def merge_files(file1, file2):
|
|
|
output_file = f"{output_prefix}share_list.txt"
|
|
output_file = f"{output_prefix}share_list.txt"
|
|
|
removed_file = f"removed_{share_type}share_items.txt"
|
|
removed_file = f"removed_{share_type}share_items.txt"
|
|
|
|
|
|
|
|
|
|
+ # 检查输出文件是否已存在
|
|
|
|
|
+ for file in [output_file, removed_file]:
|
|
|
|
|
+ if os.path.exists(file):
|
|
|
|
|
+ print(f"警告:文件 {file} 已存在,将被覆盖")
|
|
|
|
|
+
|
|
|
# 读取并合并所有有效行
|
|
# 读取并合并所有有效行
|
|
|
lines1 = [line for line in read_file(file1) if line.strip()]
|
|
lines1 = [line for line in read_file(file1) if line.strip()]
|
|
|
lines2 = [line for line in read_file(file2) if line.strip()]
|
|
lines2 = [line for line in read_file(file2) if line.strip()]
|
|
@@ -85,13 +103,14 @@ def merge_files(file1, file2):
|
|
|
share_dict[key] = line
|
|
share_dict[key] = line
|
|
|
|
|
|
|
|
# 写入去重后的文件
|
|
# 写入去重后的文件
|
|
|
- with open(output_file, 'w', encoding='utf-8') as f:
|
|
|
|
|
|
|
+ with open(output_file, 'w', encoding='utf-8', newline='\n') as f:
|
|
|
for line in share_dict.values():
|
|
for line in share_dict.values():
|
|
|
f.write(line + '\n')
|
|
f.write(line + '\n')
|
|
|
|
|
|
|
|
# 写入删除项清单
|
|
# 写入删除项清单
|
|
|
- with open(removed_file, 'w', encoding='utf-8') as f:
|
|
|
|
|
- f.writelines(line + '\n' for line in removed_lines)
|
|
|
|
|
|
|
+ with open(removed_file, 'w', encoding='utf-8', newline='\n') as f:
|
|
|
|
|
+ for line in removed_lines:
|
|
|
|
|
+ f.write(line + '\n')
|
|
|
|
|
|
|
|
print(f"处理完成!")
|
|
print(f"处理完成!")
|
|
|
print(f"合并后的文件:{output_file}")
|
|
print(f"合并后的文件:{output_file}")
|
|
@@ -107,12 +126,16 @@ def main():
|
|
|
|
|
|
|
|
args = parser.parse_args()
|
|
args = parser.parse_args()
|
|
|
|
|
|
|
|
|
|
+ if not args.pan115 and not args.quark:
|
|
|
|
|
+ parser.print_help()
|
|
|
|
|
+ sys.exit(1)
|
|
|
|
|
+
|
|
|
# 处理115网盘文件
|
|
# 处理115网盘文件
|
|
|
if args.pan115:
|
|
if args.pan115:
|
|
|
try:
|
|
try:
|
|
|
merge_files(args.pan115[0], args.pan115[1])
|
|
merge_files(args.pan115[0], args.pan115[1])
|
|
|
- except FileNotFoundError:
|
|
|
|
|
- print(f"未找到115网盘分享文件: {args.pan115}")
|
|
|
|
|
|
|
+ except FileNotFoundError as e:
|
|
|
|
|
+ print(f"错误: {e}")
|
|
|
except ValueError as e:
|
|
except ValueError as e:
|
|
|
print(f"处理115网盘文件时出错: {e}")
|
|
print(f"处理115网盘文件时出错: {e}")
|
|
|
|
|
|
|
@@ -120,8 +143,8 @@ def main():
|
|
|
if args.quark:
|
|
if args.quark:
|
|
|
try:
|
|
try:
|
|
|
merge_files(args.quark[0], args.quark[1])
|
|
merge_files(args.quark[0], args.quark[1])
|
|
|
- except FileNotFoundError:
|
|
|
|
|
- print(f"未找到夸克网盘分享文件: {args.quark}")
|
|
|
|
|
|
|
+ except FileNotFoundError as e:
|
|
|
|
|
+ print(f"错误: {e}")
|
|
|
except ValueError as e:
|
|
except ValueError as e:
|
|
|
print(f"处理夸克网盘文件时出错: {e}")
|
|
print(f"处理夸克网盘文件时出错: {e}")
|
|
|
|
|
|