zhensolid 1 an în urmă
părinte
comite
d3a51be92e
1 a modificat fișierele cu 129 adăugiri și 0 ștergeri
  1. 129 0
      xiaoya_compare_files.py

+ 129 - 0
xiaoya_compare_files.py

@@ -0,0 +1,129 @@
+# 处理115文件
+# 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 - -pan115 "115share_list.txt" "115share_list [tg].txt" - -quark "quarkshare_list.txt" "quarkshare_list [tg].txt"
+import sys
+import argparse
+
+def read_file(filename):
+    with open(filename, 'rb') as f:
+        return f.read().decode('utf-8').splitlines()
+
+def get_share_type(filename):
+    """判断分享文件类型"""
+    filename_lower = filename.lower()
+    # 115网盘相关的文件名模式
+    if any(pattern in filename_lower for pattern in ['115share', '115code', '115pan']):
+        return "115"
+    # 夸克网盘相关的文件名模式
+    elif any(pattern in filename_lower for pattern in ['quarkshare', 'quarkcode', 'quarkpan']):
+        return "quark"
+    else:
+        raise ValueError(f"无法判断文件类型: {filename}\n文件名需包含 '115share/115code/115pan' 或 'quarkshare/quarkcode/quarkpan'")
+
+def verify_file_types(file1, file2):
+    """验证两个文件是否属于同一类型"""
+    type1 = get_share_type(file1)
+    type2 = get_share_type(file2)
+    if type1 != type2:
+        raise ValueError(f"文件类型不匹配:\n{file1} 是 {type1} 类型\n{file2} 是 {type2} 类型")
+    return type1
+
+def extract_share_id(line, share_type):
+    """根据不同类型提取分享ID"""
+    parts = line.strip().split()
+    if len(parts) >= 3:
+        if share_type == "115":
+            return parts[1]  # 115格式:第二部分是分享ID
+        elif share_type == "quark":
+            return f"{parts[1]}_{parts[2]}"  # 夸克格式:第二和第三部分组合
+    return None
+
+def get_category(line):
+    """获取分类路径(第一个部分)"""
+    parts = line.strip().split()
+    return parts[0] if parts else ""
+
+def merge_files(file1, file2):
+    """根据文件名判断类型并合并文件"""
+    # 判断并验证文件类型
+    share_type = verify_file_types(file1, file2)
+    output_prefix = f"merged_{share_type}"
+    
+    output_file = f"{output_prefix}share_list.txt"
+    removed_file = f"removed_{share_type}share_items.txt"
+    
+    # 读取并合并所有有效行
+    lines1 = [line for line in read_file(file1) if line.strip()]
+    lines2 = [line for line in read_file(file2) if line.strip()]
+    
+    # 使用字典来存储,键为"分类+分享ID",值为完整行
+    share_dict = {}
+    removed_lines = []
+    
+    # 处理第一个文件
+    for line in lines1:
+        share_id = extract_share_id(line, share_type)
+        if share_id:
+            category = get_category(line)
+            key = f"{category}_{share_id}"
+            share_dict[key] = line
+
+    # 处理第二个文件,记录重复项
+    for line in lines2:
+        share_id = extract_share_id(line, share_type)
+        if share_id:
+            category = get_category(line)
+            key = f"{category}_{share_id}"
+            if key in share_dict:
+                removed_lines.append(line)
+            else:
+                share_dict[key] = line
+
+    # 写入去重后的文件
+    with open(output_file, 'w', encoding='utf-8') as f:
+        for line in share_dict.values():
+            f.write(line + '\n')
+    
+    # 写入删除项清单
+    with open(removed_file, 'w', encoding='utf-8') as f:
+        f.writelines(line + '\n' for line in removed_lines)
+    
+    print(f"处理完成!")
+    print(f"合并后的文件:{output_file}")
+    print(f"重复项清单:{removed_file}")
+
+def main():
+    """主函数,处理不同类型的文件"""
+    parser = argparse.ArgumentParser(description='合并并去重分享链接文件')
+    parser.add_argument('--pan115', nargs=2, metavar=('FILE1', 'FILE2'),
+                      help='115网盘的两个文件')
+    parser.add_argument('--quark', nargs=2, metavar=('FILE1', 'FILE2'),
+                      help='夸克网盘的两个文件')
+    
+    args = parser.parse_args()
+    
+    # 处理115网盘文件
+    if args.pan115:
+        try:
+            merge_files(args.pan115[0], args.pan115[1])
+        except FileNotFoundError:
+            print(f"未找到115网盘分享文件: {args.pan115}")
+        except ValueError as e:
+            print(f"处理115网盘文件时出错: {e}")
+    
+    # 处理夸克网盘文件
+    if args.quark:
+        try:
+            merge_files(args.quark[0], args.quark[1])
+        except FileNotFoundError:
+            print(f"未找到夸克网盘分享文件: {args.quark}")
+        except ValueError as e:
+            print(f"处理夸克网盘文件时出错: {e}")
+
+if __name__ == "__main__":
+    main()