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

Python批量处理多文件夹大网格排放TXT文件,按经纬度筛选

批量处理大体积网格化排放文件的高效解决方案

问题分析

你的代码报错是因为subset不是pandas或Python的内置函数,且原代码存在两个核心问题:

  1. 仅创建了空DataFrame,未将读取的文件内容导入
  2. 直接用read()读取超百万行文件会导致内存过载,效率极低

高效实现代码

以下代码实现批量遍历目标文件夹下所有子目录的网格化排放.txt,分块读取大文件以避免内存溢出,按指定经纬度筛选后保存结果:

import pandas as pd
import os

# 配置参数
ROOT_DIR = r"替换为你的目标根文件夹路径"
OUTPUT_PATH = r"筛选后的排放数据.txt"
# 经纬度筛选范围
LAT_BOUNDS = (28, 33)
LON_BOUNDS = (75, 97)

# 初始化存储最终结果的DataFrame
filtered_data = pd.DataFrame(columns=['lat', 'lon', 'emission'])

# 遍历所有子目录查找目标文件
for root, _, files in os.walk(ROOT_DIR):
    for filename in files:
        if filename == "网格化排放.txt":
            file_full_path = os.path.join(root, filename)
            print(f"Processing: {file_full_path}")
            
            # 分块读取大文件,chunksize可根据内存调整
            for chunk in pd.read_csv(
                file_full_path,
                sep="\t",  # 根据实际文件分隔符修改(如逗号、空格)
                names=['lat', 'lon', 'emission'],  # 匹配你的数据列名
                chunksize=10000
            ):
                # 布尔索引筛选,注意加括号避免运算符优先级错误
                mask = (
                    (chunk['lat'] >= LAT_BOUNDS[0]) &
                    (chunk['lat'] <= LAT_BOUNDS[1]) &
                    (chunk['lon'] >= LON_BOUNDS[0]) &
                    (chunk['lon'] <= LON_BOUNDS[1])
                )
                filtered_chunk = chunk[mask]
                filtered_data = pd.concat([filtered_data, filtered_chunk], ignore_index=True)

# 保存结果为txt文件
filtered_data.to_csv(OUTPUT_PATH, sep="\t", index=False)
print(f"Done. Results saved to: {OUTPUT_PATH}")

核心优化说明

  • 分块读取:通过chunksize将大文件拆分为小块处理,避免一次性加载全部数据导致内存耗尽
  • 布尔索引:使用pandas原生的布尔索引替代不存在的subset函数,正确实现数据筛选
  • 批量遍历:os.walk自动遍历所有子目录,无需手动指定每个文件路径
  • 内存控制:仅保留符合条件的数据块,减少不必要的内存占用

注意事项

  • 务必根据你的文件实际分隔符修改sep参数(如文件用逗号分隔则改为sep=",")
  • 若需为每个原文件单独保存筛选结果,可将filtered_data的合并逻辑改为每个块处理后直接追加到对应输出文件
  • chunksize可根据电脑内存调整:内存充足可设为50000,内存有限则设为5000-10000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 06:50:28