当前位置: 首页 > news >正文

txt2las批量测井txt文件转las

用python批量把列格式的txt测井文件转为las格式,运行后弹出文件夹选择对话框,批量转换选择的文件夹及子文件夹下的txt文件,进度条指示转换的进度。

功能:

  1. 弹出“选择文件夹”对话框(基于 Tkinter,跨平台)。

  2. 递归遍历所选文件夹及其全部子文件夹,找出所有扩展名为 .txt 的测井文件。

  3. 假设 txt 为“列格式”,即第一行为表头(曲线名),第二行开始为数值,默认--开始的行为注释。

  4. 将每个 txt 就地生成同名的 .las 文件(LAS 2.0)。

  5. 运行完毕后给出统计信息。

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
带进度条的批量 txt → LAS 转换器
"""import os
import sys
import tkinter as tk
from tkinter import filedialog, messagebox, ttk
import threading
import numpy as np
import lasio
from tqdm import tqdm as tqdm_module# ---------- 业务逻辑 ----------
def txt_to_las(txt_path):"""单文件转换"""data = np.loadtxt(txt_path, skiprows=1)header = np.genfromtxt(txt_path, comments='--', max_rows=1, dtype=str)if data.ndim == 1:data = data.reshape(-1, 1)las = lasio.LASFile()las.well.WELL = os.path.splitext(os.path.basename(txt_path))[0]las.append_curve('DEPT', data[:, 0], unit='m')for i, name in enumerate(header[1:], start=1):las.append_curve(name.strip(), data[:, i])las_path = os.path.splitext(txt_path)[0] + '.las'las.write(las_path, version=2.0)return las_pathdef collect_txt_files(folder):"""递归收集所有 txt 文件"""txt_files = []for root, _, files in os.walk(folder):for f in files:if f.lower().endswith('.txt'):txt_files.append(os.path.join(root, f))return txt_filesdef convert_worker(txt_files, progress_var, progress_bar, root):"""后台线程:执行转换并更新进度"""total = len(txt_files)success = 0progress_var.set(0)progress_bar.config(maximum=total)# 终端进度条with tqdm_module(total=total, desc="Converting", unit="file") as pbar:for idx, txt_path in enumerate(txt_files, 1):try:txt_to_las(txt_path)success += 1except Exception as e:tqdm_module.write(f"失败:{txt_path}\n{e}")pbar.update(1)# 更新 GUI 进度条progress_var.set(idx)root.update_idletasks()messagebox.showinfo("完成", f"共 {total} 个文件,成功转换 {success} 个!")root.quit()# ---------- GUI ----------
def run_gui():root = tk.Tk()root.title("txt → LAS 批量转换")root.geometry("400x120")root.resizable(False, False)# 进度条progress_var = tk.IntVar()progress_bar = ttk.Progressbar(root, variable=progress_var, maximum=100)progress_bar.pack(fill=tk.X, padx=15, pady=20)# 选择文件夹folder = filedialog.askdirectory(title="请选择包含 txt 测井文件的文件夹")if not folder:root.destroy()returntxt_files = collect_txt_files(folder)if not txt_files:messagebox.showwarning("提示", "该文件夹下未发现 txt 文件!")root.destroy()return# 启动后台线程threading.Thread(target=convert_worker,args=(txt_files, progress_var, progress_bar, root),daemon=True).start()root.mainloop()# ---------- 主入口 ----------
if __name__ == '__main__':try:import lasio, numpy, tqdmexcept ImportError as e:messagebox.showerror("缺少依赖", f"请先安装:\n\npip install lasio numpy tqdm")sys.exit(1)run_gui()

http://www.dtcms.com/a/358892.html

相关文章:

  • 【C++】类和对象3
  • 【学Python自动化】 1. Python 安装与配置完全指南 (Windows)
  • 微论-突触的作用赋能思考(可能是下一代人工智能架构的启发式理论)
  • fastdds qos:LifespanQosPolicy
  • 2025年- H101-Lc209--1979.找出数组的最大公约数(gcd最大公约数)--Java版
  • STM32G474 IAP 双bank升级的坑
  • git的三种分区与分支的关系
  • Pomian语言处理器研发笔记(二):使用组合模式定义表示程序结构的语法树
  • for in+逻辑表达式 生成迭代对象,最后转化为列表 ——注意list是生成器转化为列表,但[生成器]得到的就是一个列表,其中包含一个生成器元素
  • HarmonyOS 持久化存储:PersistentStorage 实战指南
  • Kafka面试精讲 Day 2:Topic、Partition与Replica机制
  • Midscene.js:AI驱动的UI自动化测试框架
  • PLSQL Developer 12.0.1 x64 安装步骤详解(附Oracle连接设置|附安装包下载)​
  • SQL 学习
  • 探索 XGBoost 与 LightGBM 的差异:哪个更适合你的项目?
  • 【Pytorch】生成对抗网络实战
  • 快消品牌如何用 DAM 管理万张素材?
  • Coze源码分析-API授权-编辑令牌-后端源码
  • MySQL视图、存储过程与触发器详解
  • 实战指南|解锁 Highcharts 图表导出与数据格式优化
  • windows32位下载谷歌浏览器的地址
  • Git提交信息
  • 不用公网IP也能?cpolar实现Web-Check远程安全检测(1)
  • Qt 窗口 - 3
  • 弱内存模型和强内存模型架构(Weak/Strong Memory Model)
  • stack queue的实现 deque的底层结构 priority_queue的实现
  • easy-http类似feign的轻量级http客户端工具
  • C++三方服务异步拉起
  • 针对 “TCP 连接中断 / 终止阶段” 的攻击
  • K8s卷机制:数据持久化与共享