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()

 

posted @ 2022-07-28 13:56  名字不好起啊  阅读(56)  评论(0编辑  收藏  举报