python 筛选文件 提取到文件夹

import pandas as pd
import os
import shutil

def copy_files_and_append_to_excel(excel_path):
    # 读取原Excel文件
    df = pd.read_excel(excel_path)

    # 搜索第一列中包含“你好”的行
    matched_rows = df[df.iloc[:, 0].str.contains('你好', na=False)]

    # 创建目标文件夹 "你好歹"
    target_folder = os.path.join(os.getcwd(), '你好歹')
    os.makedirs(target_folder, exist_ok=True)

    # 用于存储需要追加的数据
    new_hello_data = []  # 第一列的“你好”
    new_filename_data = []  # 第三列的文件名

    # 遍历匹配到的行并复制文件
    for _, row in matched_rows.iterrows():
        relative_path = row.iloc[1]  # 获取第二列的相对路径
        abs_path = os.path.join('D:\', relative_path)  # 构建绝对路径

        if os.path.isfile(abs_path):
            try:
                shutil.copy(abs_path, target_folder)  # 复制文件
                file_name = os.path.basename(abs_path)  # 获取文件名

                # 记录需要填充的数据
                new_hello_data.append("你好")
                new_filename_data.append(file_name)

                print(f"成功复制文件: {abs_path} -> {target_folder}")
            except Exception as e:
                print(f"复制文件失败: {abs_path}, 错误: {e}")
        else:
            print(f"文件不存在: {abs_path}")

    # 找到第一列和第三列的第一个空行的索引
    first_empty_row_col1 = df.iloc[:, 0].last_valid_index() + 1 if df.iloc[:, 0].last_valid_index() is not None else 0
    first_empty_row_col3 = df.iloc[:, 2].last_valid_index() + 1 if df.iloc[:, 2].last_valid_index() is not None else 0

    # 将新数据填入找到的空行位置
    for i, (hello, filename) in enumerate(zip(new_hello_data, new_filename_data)):
        # 第一列的空行填充
        if first_empty_row_col1 + i < len(df):
            df.iloc[first_empty_row_col1 + i, 0] = hello
        else:
            df = pd.concat([df, pd.DataFrame([[hello, None, None]])], ignore_index=True)

        # 第三列的空行填充
        if first_empty_row_col3 + i < len(df):
            df.iloc[first_empty_row_col3 + i, 2] = filename
        else:
            if first_empty_row_col1 + i >= len(df):  # 如果新行已创建
                df.iloc[-1, 2] = filename
            else:
                df = pd.concat([df, pd.DataFrame([[None, None, filename]])], ignore_index=True)

    # 将更新后的内容保存回原Excel文件
    df.to_excel(excel_path, index=False)
    print(f"已更新Excel文件: {excel_path}")

# 示例调用
excel_file = 'text.xlsx'  # 替换为你的Excel文件路径
copy_files_and_append_to_excel(excel_file)


if first_empty_row_col3 + i < len(df):

检查第三列是否有足够的空位可用。
如果有,就在第 first_empty_row_col3 + i 行的第三列填入文件名。
else:

如果没有足够的空行,需要增加新行。
嵌套逻辑:

if first_empty_row_col1 + i >= len(df):

检查是否已经通过前面逻辑创建了新行。
如果新行已创建,将文件名填入最后一行的第三列(df.iloc[-1, 2])。
else:

如果新行未创建,则用 pd.concat() 添加新行,其结构为 [None, None, filename],即文件名填入第三列,其他列留空。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值