python 对比文本文件列表数据,过滤文件夹未下载项
之前写过脚本用来下载 ts 视频文件,偶尔存在个别 ts 下载不下来的情况,手动去重新处理又太麻烦,所以需要写个脚本来过滤未下载项。
逻辑比较简单:
1、配置 download 文件夹地址,读取已下载好的文件名称
2、配置 sourceList.txt 文件地址,读取要下载项字符串地址
3、根据读取的 sourceList 数据,循环判断是否已下载,将未下载的数据收集到新数组中,最后写入新的 txt 文件
记录代码:
# -*- coding: utf-8 -*- # data: 2022/07/21 # 对比更新 sourceList,维护未下载列表数据 import os import Config def main(): # 获取基本配置 cf = Config.Config() # download 文件夹地址 base = cf.get_value('base') # sourceList 文件地址 target = cf.get_value('target') # 输出文件名 output = cf.get_value('output') # 阅读 download 文件夹下文件名称并记录 files_name = get_file_list(base) #最终要写值的数组 final_list = [] # 阅读 sourceList 内容,判断排除已下载名称 with open(target, 'r') as f: arr = f.readlines() for i in range(0, len(arr)): # 如果当前项已存在于 download 列表中,则跳过 decode_url = arr[i].decode('utf-8') # 跳过空行 if decode_url != '\n': # 获取文件名称 name = get_file_name(decode_url) # 判断当前 sourcelist 列表项是否已存在于 download 中 if name not in files_name: # download 中不存在,则记录对应地址 final_list.append(arr[i]) # print final_list # 遍历数组,将未下载的地址写入文件 f = open(output, 'w') for name in final_list: f.write(name + '\n') f.close() # 完结提示 print 'Down Finish!' def get_file_list(path): # 根据路径获取文件夹下文件名称 for root, dirs, files in os.walk(path): print 'files: ', files return files def get_file_name(url): # 根据地址信息获取文件名称 # 可能存在 url 后 .ts 接 ? 带参数的情况,这里处理下参数 address = url.split('?')[0] # 获取最后一个/ 后的名称 arr = address.split('/') # 处理换行符 return arr[len(arr) - 1].split('\n')[0] if __name__ == '__main__': main()