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
相关产品推荐
相关产品推荐

