You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python按文件名移动指定Excel文件及2024年数据筛选问题

问题解决:警方数据文件移动与2024年数据筛选加载

一、文件移动失败的问题修复

问题分析

从运行输出和代码逻辑来看,核心问题有两点:

  1. 遍历逻辑遗漏文件:原代码通过os.listdir遍历源目录后,仅对文件夹执行os.walk,但目标CSV文件直接存放在源目录根路径下,被误判为"folder"后因os.path.isdir返回False,完全跳过了文件检查环节。
  2. 文件名匹配条件不符:原代码判断file.endswith("street.csv"),但实际目标文件名以stop-and-search.csv结尾,应改为匹配文件名中**包含"street"**的条件。

修正后的代码

import os
import shutil

def move_street_files(source_dir, dest_dir):
    # 校验源目录存在性
    if not os.path.exists(source_dir):
        print(f"源目录不存在: {source_dir}")
        return
    
    # 遍历源目录下所有层级的文件
    for root, _, files in os.walk(source_dir):
        for file in files:
            # 匹配文件名中包含"street"的文件(不区分大小写)
            if "street" in file.lower():
                source_path = os.path.join(root, file)
                dest_path = os.path.join(dest_dir, file)
                try:
                    shutil.move(source_path, dest_path)
                    print(f"已移动: {source_path} -> {dest_path}")
                except Exception as e:
                    print(f"移动失败 {source_path}: {str(e)}")

# 路径配置
source_dir = r'C:\Users\Nathan\Documents\Data Science Projects\Police Dataset\Police Dataset\Stop and Search'
dest_dir = r'C:\Users\Nathan\Documents\Data Science Projects\Police Dataset\Police Dataset\Street'

# 创建目标目录(不存在则自动创建)
os.makedirs(dest_dir, exist_ok=True)

# 执行移动操作
move_street_files(source_dir, dest_dir)
print("操作完成")

关键改进点

  • 直接用os.walk(source_dir)遍历全目录,无需手动区分文件夹与文件,避免遗漏根目录下的目标文件;
  • 改用"street" in file.lower()匹配条件,支持不区分大小写且匹配文件名任意位置的"street",适配实际文件名格式;
  • 移除冗余打印语句,简化输出信息。

二、仅加载2024年数据的方法

从文件名格式(如2021-03-avon-and-somerset-stop-and-search.csv)可知,文件名以YYYY-MM开头,因此可先筛选出以"2024-"开头的文件,再加载到DataFrame,大幅减少加载耗时。

示例代码(基于Pandas)

import os
import pandas as pd

def load_2024_data(source_dir):
    df_list = []
    # 遍历目标目录下所有文件
    for root, _, files in os.walk(source_dir):
        for file in files:
            # 筛选2024年的文件
            if file.startswith("2024-"):
                file_path = os.path.join(root, file)
                try:
                    # 若为Excel文件,替换为pd.read_excel
                    df = pd.read_csv(file_path)
                    df_list.append(df)
                    print(f"已加载: {file_path}")
                except Exception as e:
                    print(f"加载失败 {file_path}: {str(e)}")
    
    # 合并所有2024年数据
    if df_list:
        combined_df = pd.concat(df_list, ignore_index=True)
        return combined_df
    else:
        print("未找到2024年数据文件")
        return None

# 加载2024年数据
source_dir = r'C:\Users\Nathan\Documents\Data Science Projects\Police Dataset\Police Dataset\Street'
df_2024 = load_2024_data(source_dir)

# 后续分析逻辑
if df_2024 is not None:
    print(f"2024年数据总行数: {len(df_2024)}")
    # 你的数据分析代码

额外优化建议

  • 若文件为Excel格式,将pd.read_csv替换为pd.read_excel,并可通过usecols参数指定仅加载所需列,进一步压缩加载时间;
  • 若文件名年份格式不统一,可通过正则表达式提取年份:
    import re
    year_match = re.search(r'(\d{4})-', file)
    if year_match and year_match.group(1) == "2024":
        # 执行加载操作
    

内容的提问来源于stack exchange,提问作者Thomas Mckillen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 07:00:16