64 lines
2.2 KiB
Python
64 lines
2.2 KiB
Python
import sys
|
||
import csv
|
||
|
||
def compare_files(file_a, file_b):
|
||
"""
|
||
比较两个文件,并输出差异
|
||
|
||
Args:
|
||
file_a (str): 文件 A 的路径
|
||
file_b (str): 文件 B 的路径
|
||
"""
|
||
|
||
try:
|
||
# 创建输出文件
|
||
with open('need_update.txt', 'w', newline='') as f_update, \
|
||
open('old_only.txt', 'w', newline='') as f_b_only:
|
||
writer_update = csv.writer(f_update, delimiter='\t')
|
||
writer_b_only = csv.writer(f_b_only, delimiter='\t')
|
||
|
||
# 读取文件 A
|
||
data_a = {} # 使用字典存储,key为开始链接编码,value为整行数据
|
||
with open(file_a, 'r') as f:
|
||
reader = csv.reader(f, delimiter='\t')
|
||
for row in reader:
|
||
data_a[row[6]] = row
|
||
|
||
# 读取文件 B
|
||
data_b = {}
|
||
with open(file_b, 'r') as f:
|
||
reader = csv.reader(f, delimiter='\t')
|
||
for row in reader:
|
||
data_b[row[6]] = row
|
||
|
||
# 比较并输出
|
||
for key, value in data_a.items():
|
||
if key not in data_b:
|
||
writer_update.writerow(value)
|
||
else:
|
||
if abs(int(value[8]) - int(data_b[key][8])) > 100:
|
||
writer_update.writerow(value)
|
||
|
||
for key, value in data_b.items():
|
||
if key not in data_a:
|
||
writer_b_only.writerow(value)
|
||
|
||
except FileNotFoundError:
|
||
print(f"文件不存在: {file_a} 或 {file_b}")
|
||
except csv.Error as e:
|
||
print(f"CSV文件读取错误: {e}")
|
||
except Exception as e:
|
||
print(f"发生未知错误: {e}")
|
||
|
||
if __name__ == '__main__':
|
||
if len(sys.argv) != 3:
|
||
print("Usage: python script.py file_a file_b")
|
||
print("file_a : 新下载的列表,通常按照更新时间排序")
|
||
print("file_b : 以前下载的列表")
|
||
print("输出 need_update.txt : 需要更新的列表")
|
||
print("输出 old_only.txt : 仅在较早下载列表中的行,通常不应该有")
|
||
sys.exit(1)
|
||
|
||
file_a = sys.argv[1]
|
||
file_b = sys.argv[2]
|
||
compare_files(file_a, file_b) |