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

Python批量遍历txt文件实现WGS84到JDG2000坐标转换

批量坐标转换实现方案

把你已验证通过的单文件处理逻辑封装为独立函数,搭配正确的路径匹配规则遍历目标目录即可实现批量处理,具体实现如下:

前置准备

  • 单独创建输出目录存储转换后的文件,不要直接覆盖原始文件,避免源数据损坏
  • 全量跑数前先取3-5个样本文件做测试,确认坐标转换精度、输出列格式符合要求后再执行全量处理
  • Windows系统路径不要直接写未转义的反斜杠路径,统一用正斜杠或者r"路径"的原始字符串格式,避免转义字符导致路径匹配失败

可直接复用的代码框架

代码里已经预留了单文件逻辑的嵌入位置,把你之前跑通的单文件处理代码替换到对应位置即可:

import os
import glob
import pandas as pd
import numpy as np
from pyproj import Transformer

# 坐标系转换器全局初始化一次即可,避免每个文件重复初始化拖慢处理速度
transformer = Transformer.from_crs("EPSG:4326", "EPSG:2452", always_xy=True)

def process_single_file(input_path: str, output_path: str):
    # --- 以下部分直接替换为你已验证通过的单文件处理逻辑 ---
    # 示例:读取固定宽度无表头txt
    df = pd.read_fwf(input_path, header=None)
    # 注意:如果你原逻辑里列数是从1开始计数,第7、8列对应pandas从0开始的索引6、7,和你之前单文件逻辑保持一致即可
    source_x = df.iloc[:, 6].values
    source_y = df.iloc[:, 7].values
    # 执行坐标转换
    target_x, target_y = transformer.transform(source_x, source_y)
    # 替换原坐标列,其余列保持不变
    df.iloc[:, 6] = target_x
    df.iloc[:, 7] = target_y
    # 按你之前调好的数值格式输出,比如保留3位小数就填'%.3f',和单文件测试时的参数保持一致
    df.to_csv(
        output_path,
        sep="\t",
        index=False,
        header=False,
        float_format="%.3f" # 替换为你实际需要的数值格式
    )
    # --- 单文件逻辑替换结束 ---
    print(f"已完成处理: {os.path.basename(input_path)}")

if __name__ == "__main__":
    # 路径配置
    INPUT_DIR = "D:/Documents/samples"
    OUTPUT_DIR = "D:/Documents/samples_jdg2000"
    # 自动创建输出目录,已存在也不会报错
    os.makedirs(OUTPUT_DIR, exist_ok=True)

    # 精准匹配Square+4位数字命名的txt文件,避免把目录下其他无关文件扫进来
    match_pattern = os.path.join(INPUT_DIR, "Square[0-9][0-9][0-9][0-9].txt")
    file_list = glob.glob(match_pattern)
    print(f"扫描到符合命名规则的待处理文件共 {len(file_list)} 个")

    # 遍历逐个处理,加异常捕获避免单个文件出错导致整个批量任务中断
    for file_path in file_list:
        file_name = os.path.basename(file_path)
        save_path = os.path.join(OUTPUT_DIR, file_name)
        try:
            process_single_file(file_path, save_path)
        except Exception as e:
            print(f"文件 {file_name} 处理失败,错误信息:{str(e)},已跳过")

之前glob/os遍历失败的常见排查点

  • 匹配规则过于宽泛或写错:不要用"*.txt"或者"Square*.txt"这类模糊规则,容易匹配到不符合命名规范的文件,用代码里的数字区间匹配规则准确率最高
  • 路径拼接错误:不要手动拼接带斜杠/反斜杠的路径字符串,统一用os.path.join()自动适配系统分隔符,避免路径格式错误
  • 文件被占用:待处理文件如果被Excel、记事本等程序打开,会触发读取权限错误,处理前关闭所有占用目标文件的程序
  • 列索引错位:注意日常计数是从1开始,pandas默认列索引从0开始,读取列的时候和你单文件测试时的索引保持一致,不要取错列

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 20:27:19