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

Python按条件移动文件问题:符合行数要求的文件无法移动

问题分析与修正方案

代码无法运行的核心错误

  • 字符串路径不能直接调用glob方法
    你定义的src是普通字符串(比如'path1'),但.glob()是pathlib.Path对象的专属方法,直接用字符串调用会触发AttributeError: 'str' object has no attribute 'glob'报错。

  • shutil.move参数完全错误
    shutil.move()的第一个参数必须是要移动的单个文件路径,你写的shutil.move(src, ...)是把整个源文件夹往目标路径移,完全违背需求,正确的参数应该是遍历到的CSV文件(比如files变量)。

  • 第二个版本的行数判断逻辑彻底失效
    第二个代码里的len(files)是计算路径字符串的长度(比如'path1/test.csv'的长度是14),和文件实际行数毫无关系,完全偏离了判断条件。


修正后的可运行代码

方式1:使用pathlib(推荐,更简洁)

from pathlib import Path
import pandas as pd
import shutil

# 转为Path对象,支持glob等路径操作
src = Path('path1')
dest = Path('path2')
# 确保目标文件夹存在,不存在则自动创建
dest.mkdir(exist_ok=True)

for csv_file in src.glob('*.csv'):
    try:
        # 读取CSV并判断数据行数
        df = pd.read_csv(csv_file)
        if len(df) >= 100:
            # 移动文件:源文件路径 → 目标文件夹+文件名
            shutil.move(str(csv_file), str(dest / csv_file.name))
            # 同一磁盘下用rename更高效:csv_file.rename(dest / csv_file.name)
    except Exception as e:
        print(f"处理文件 {csv_file.name} 出错: {str(e)}")

方式2:使用os模块(适合新手理解基础路径操作)

import os
import pandas as pd
import shutil

src = 'path1'
dest = 'path2'

# 确保目标文件夹存在
if not os.path.exists(dest):
    os.makedirs(dest)

for filename in os.listdir(src):
    if filename.endswith('.csv'):
        file_path = os.path.join(src, filename)
        try:
            df = pd.read_csv(file_path)
            if len(df) >= 100:
                shutil.move(file_path, os.path.join(dest, filename))
        except Exception as e:
            print(f"处理文件 {filename} 出错: {str(e)}")

额外优化建议

如果只是判断文件行数,不用pandas会更高效(避免加载整个文件到内存),适合大文件:

# 统计文件总行数(含表头)
def count_file_lines(file_path):
    with open(file_path, 'r', encoding='utf-8') as f:
        return sum(1 for line in f)

# 使用时替换pandas读取部分:
line_count = count_file_lines(file_path)
# 如果CSV有表头,需要减1(比如表头占1行,数据行≥100则line_count-1≥100)
if line_count - 1 >= 100:
    shutil.move(file_path, os.path.join(dest, filename))

关于降赞的说明

Stack Overflow社区更看重提问的精准性:你只说“无法成功移动文件”,但没提供具体报错信息(比如是语法错误还是逻辑错误)、Python版本、库版本等关键信息,别人很难快速定位问题。下次提问时附上报错内容、运行环境,会更容易获得有效帮助,也能避免不必要的降赞。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 02:58:18