python读取文件夹下所有文件并选择特定文件

情况:a文件夹下有b,c,d等若干文件夹,b,c,d等文件夹下又各自有若干csv文件。

需求:需要找到b,c,d等文件夹中最新和次新的两个文件进行比较,然后将所有的增量汇总。

那么问题来了,到底怎么取最新和次新的文件?python支持吗?

python中如何获取文件的修改时间 - 问答 - 亿速云 python中获取文件修改时间的方法:1、在win操作系统中找到python程序目录;2、打开idle工具;3、在idle中新建一个shell脚本;4、输入“import os,time”指令导入os... https://www.yisu.com/ask/6755.html#:~:text=python%E4%B8%AD%E8%8E%B7%E5%8F%96%E6%96%87%E4%BB%B6%E4%BF%AE%E6%94%B9%E6%97%B6%E9%97%B4%E7%9A%84%E6%96%B9%E6%B3%95%EF%BC%9A1%E3%80%81%E5%9C%A8win%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F%E4%B8%AD%E6%89%BE%E5%88%B0python%E7%A8%8B%E5%BA%8F%E7%9B%AE%E5%BD%95%EF%BC%9B2%E3%80%81%E6%89%93%E5%BC%80idle%E5%B7%A5%E5%85%B7%EF%BC%9B3%E3%80%81%E5%9C%A8idle%E4%B8%AD%E6%96%B0%E5%BB%BA%E4%B8%80%E4%B8%AAshell%E8%84%9A%E6%9C%AC%EF%BC%9B4%E3%80%81%E8%BE%93%E5%85%A5%E2%80%9Cimport,os%2Ctime%E2%80%9D%E6%8C%87%E4%BB%A4%E5%AF%BC%E5%85%A5os%E6%A8%A1%E5%9D%97%E5%92%8Ctime%E6%A8%A1%E5%9D%97%EF%BC%9B5%E3%80%81%E9%80%9A%E8%BF%87%E2%80%9Cos.path.getmtime%20%28%E6%96%87%E4%BB%B6%E8%B7%AF%E5%BE%84%29%E2%80%9D%E6%8C%87%E4%BB%A4%E8%8E%B7%E5%8F%96%E6%96%87%E4%BB%B6%E4%BF%AE%E6%94%B9%E6%97%B6%E9%97%B4%E5%8D%B3%E5%8F%AF%E3%80%82

1 Python获取文件最新的修改时间

# 方法一
import os

def listdir(path, list_name):
    """
    将文件路径和修改时间存入列表中
    :param path: 文件夹的绝对路径
    :param list_name: 空列表
    :return:
    """
    for file in os.listdir(path):  # 对目录中的所有文件进行遍历
        file_path = os.path.join(path, file)  # 文件的路径
        if os.path.isdir(file_path):  # 如果拼接后的还是目录,进行递归
            listdir(file_path, list_name)
        else:  # 如果拼接之后,还是文件,就将元组形式存到列表
            list_name.append((file_path, os.path.getmtime(file_path)))


def newestfile(target_list):
    """
    找出最新修改的文件
    :param target_list: 存有文件路径和修改时间的列表
    :return: 最新的文件
    """
    newest_file = target_list[0]  # 默认第一个元组中的文件是最新的
    for i in range(len(target_list)):  # 对列表进行遍历
        if i < (len(target_list) - 1) and newest_file[1] < target_list[i + 1][1]:
            newest_file = target_list[i + 1]
        else:
            continue
    print('newest file is', newest_file)
    return newest_file


p = r'G:\test_demo'
list = []
listdir(p, list)

new_file = newestfile(list)


# 方法二

def new_report(test_report):
    lists = os.listdir(test_report)   # 列出目录的下所有文件和文件夹保存到lists
    lists.sort(key=lambda fn: os.path.getmtime(test_report + "/" + fn))  # 按时间排序
    file_new = os.path.join(test_report, lists[-1])     # 获取最新的文件保存到file_new
    return file_new


file_new = new_report("G:\\test_demo")
print(file_new)



2 比对csv文件

import csv

with open('a.csv') as f:
    reader = csv.reader(f)
    # print(list(reader))
    # input()
    als = list(reader)

with open('b.csv') as f:
    reader = csv.reader(f)
    # print(list(reader))
    bls = list(reader)

bdict = {}
for b in bls[1:]:
    if b[2] == '':
        continue
    bdict[b[2]] = [b[i] for i in [1]+list(range(4, 13))]

adict = {}
for a in als[1:]:
    adict[a[10]] = [a[i] for i in [9]+list(range(11, 20))]

for a in als[1:]:
    a_ls = adict[a[10]]
    b_ls = bdict[a[10]]
    b_wrong = False
    for i in range(len(a_ls)):
        if i in [1, 8]:
            if b_ls[i] not in a_ls[i]:
                b_wrong = True
                a_str = a_ls[i]
                b_str = b_ls[i]
        else:
            if b_ls[i] != a_ls[i]:
                b_wrong = True
                a_str = a_ls[i]
                b_str = b_ls[i]
        if b_wrong:
            print('%s的%s和%s不一致'%(a[10], a_str, b_str))
            break

```