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

求Python脚本:从N盘多文件夹提取最新.geojson用于ArcGIS Pro批量导入

从多子文件夹提取最新GeoJSON并集中的Python脚本

你需要的脚本要实现遍历N盘所有子文件夹、每个文件夹只保留最新创建的GeoJSON、集中复制到指定目录,原脚本没有处理“同一位置取最新”的逻辑,下面是修改后的完整脚本,以及针对零基础的逐行讲解:

import os
from shutil import copyfile

# ---------------------- 这里需要你修改成自己的路径 ----------------------
# N盘的根目录(要搜索的起始文件夹)
n_drive_path = r"N:\"
# 要集中存放文件的目标目录
out_folder = r"C:\GeoJSON_集中目录"
# ----------------------------------------------------------------------

# 用字典存每个文件夹下的GeoJSON文件,键是文件夹路径,值是该文件夹下的所有GeoJSON文件信息
folder_geojsons = {}

# 遍历N盘下所有文件夹和文件
for root, _, files in os.walk(n_drive_path):
    for file in files:
        # 只处理.geojson后缀的文件(不区分大小写)
        if file.lower().endswith(".geojson"):
            file_full_path = os.path.join(root, file)
            # 获取文件的创建时间(Windows系统用getctime,Linux/macOS若要修改时间可换getmtime)
            create_time = os.path.getctime(file_full_path)
            # 如果这个文件夹还没在字典里,先初始化空列表
            if root not in folder_geojsons:
                folder_geojsons[root] = []
            # 把(创建时间,文件全路径)添加到对应文件夹的列表中
            folder_geojsons[root].append( (create_time, file_full_path) )

# 确保目标目录存在,不存在则自动创建
if not os.path.exists(out_folder):
    os.makedirs(out_folder)

# 遍历每个文件夹的GeoJSON列表,选择最新的文件复制到目标目录
for folder, file_list in folder_geojsons.items():
    # 按创建时间倒序排序,第一个就是最新文件
    file_list.sort(reverse=True, key=lambda x: x[0])
    latest_file = file_list[0][1]
    # 提取文件名(若要避免不同文件夹重名覆盖,可看下方额外说明)
    file_name = os.path.basename(latest_file)
    target_path = os.path.join(out_folder, file_name)
    # 执行复制操作
    copyfile(latest_file, target_path)
    print(f"已复制最新文件:{latest_file} -> {target_path}")

脚本逐行通俗讲解

1. 导入必备工具包

import os
from shutil import copyfile
  • os是Python自带的文件/文件夹操作工具,用来找文件、查看文件时间、创建文件夹等
  • copyfile是专门用来复制文件的工具,直接从shutil工具包中调用即可

2. 设置自定义路径(你需要修改的部分)

n_drive_path = r"N:\"
out_folder = r"C:\GeoJSON_集中目录"
  • 字符串前加r是告诉Python这是原始路径,不用处理路径里的反斜杠转义,直接写你实际的文件夹路径就行
  • 把N:\"改成你要搜索的N盘起始文件夹(比如N:\项目调研数据\),把目标目录改成你要集中存放文件的文件夹

3. 初始化“文件夹账本”

folder_geojsons = {}
  • 字典就像一个分类账本,每个键对应一个文件夹路径,值是该文件夹下所有GeoJSON的「创建时间+文件路径」信息,方便后续筛选每个文件夹的最新文件

4. 遍历所有文件夹找GeoJSON

for root, _, files in os.walk(n_drive_path):
    for file in files:
        if file.lower().endswith(".geojson"):
            file_full_path = os.path.join(root, file)
            create_time = os.path.getctime(file_full_path)
            if root not in folder_geojsons:
                folder_geojsons[root] = []
            folder_geojsons[root].append( (create_time, file_full_path) )
  • os.walk(n_drive_path)会自动遍历N盘下的所有子文件夹,root是当前遍历到的文件夹路径,files是该文件夹下的所有文件
  • file.lower().endswith(".geojson"):不管文件名是.GeoJSON还是.GEOJSON,都能识别为GeoJSON文件
  • os.path.getctime(file_full_path):获取文件的创建时间(Windows系统适用,Linux/macOS若要取修改时间可换成os.path.getmtime)
  • 把每个GeoJSON的创建时间和完整路径,存入对应文件夹的账本条目里

5. 确保目标目录存在

if not os.path.exists(out_folder):
    os.makedirs(out_folder)
  • 如果你设置的目标目录还没创建,Python会自动帮你生成,避免复制文件时因目录不存在报错

6. 筛选最新文件并复制

for folder, file_list in folder_geojsons.items():
    file_list.sort(reverse=True, key=lambda x: x[0])
    latest_file = file_list[0][1]
    file_name = os.path.basename(latest_file)
    target_path = os.path.join(out_folder, file_name)
    copyfile(latest_file, target_path)
    print(f"已复制最新文件:{latest_file} -> {target_path}")
  • 遍历账本里的每个文件夹条目
  • file_list.sort(reverse=True, key=lambda x: x[0]):把当前文件夹的GeoJSON按创建时间从新到旧排序,第一个就是最新的文件
  • latest_file = file_list[0][1]:取排序后的第一个文件的完整路径
  • os.path.basename(latest_file):提取文件名(比如N:\A\点位数据.geojson会提取成点位数据.geojson)
  • copyfile(...):执行复制操作,print会输出复制记录,方便你核对

额外注意:避免不同文件夹文件重名覆盖

如果不同文件夹有同名的GeoJSON,原逻辑会覆盖旧文件。若要保留所有文件,可把提取文件名的代码改成:

# 用文件夹名+原文件名命名,避免重名
folder_short_name = os.path.basename(folder)
file_name = f"{folder_short_name}_{os.path.basename(latest_file)}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 12:15:30