【Python】03 河道横断面数据处理

问题描述

现有某河道大断面测量数据,数据形式为 CAD 格式,如图所示。
【Python】03 河道横断面数据处理_第1张图片

需将其转换为文本格式,如下图。
【Python】03 河道横断面数据处理_第2张图片

实现方法

数据提取

思路

由于CAD图中的起点距高程数据无法直接导出,不利于数据格式转换。考虑采用 OCR文字识别 提取出各断面数据,并存储到 Excel 表格中。

方法

采用 QQ截图 的文字识别功能,对图片中的数据提取,校正后存储到 Excel 表格中。
【Python】03 河道横断面数据处理_第3张图片
【Python】03 河道横断面数据处理_第4张图片

数据格式转换

方法

由于断面数据较多,考虑使用 Python 自动处理,发挥 Python 在数据处理方面的优势。

实现

模块安装

安装 xlrd 模块以读取 Excel 数据,安装方法自行百度,不在赘述。

数据读取与输出

import xlrd #导入读取Excel数据模块
#读取数据
data = xlrd.open_workbook("桐庐河道地形.xlsx") 
table = data.sheet_by_name("Sheet1")
#输出数据
fo = open("桐庐河道地形.txt", "w", encoding = "ANSI")
fo.write("河道地形\n")
fo.write("22\n")

定义变量

#定义全局变量
n = 1 #序号
flag = 1 #标志:断面数据中即为1,断面间隔为0

输出断面文字部分

    if flag:
        fo.write("\n{}    断面{}    {}    0.015\n".format(n, int(line), line))
        fo.write("不规则形  1  {}  ".format(int(table.cell_value(i, 1))))
        n = n + 1
        flag = 0

输出起点距高程对

if i != table.nrows - 1:
        if line != "":
            fo.write("{}  ".format(table.cell_value(i+1, 0)))
    else:
        pass

完整程序

import xlrd #导入读取Excel数据模块
#读取数据
data = xlrd.open_workbook("桐庐河道地形.xlsx") 
table = data.sheet_by_name("Sheet1")
#输出数据
fo = open("桐庐河道地形.txt", "w", encoding = "ANSI")
fo.write("河道地形\n")
fo.write("22\n")

#定义全局变量
n = 1 #序号
flag = 1 #标志:断面数据中即为1,断面间隔为0

#主体程序
for i in range(table.nrows):
    line = table.cell_value(i, 0)

    #输出断面文字部分
    if flag:
        fo.write("\n{}    断面{}    {}    0.015\n".format(n, int(line), line))
        fo.write("不规则形  1  {}  ".format(int(table.cell_value(i, 1))))
        n = n + 1
        flag = 0

    #输出起点距高程对
    if i != table.nrows - 1:
        if line != "":
            fo.write("{}  ".format(table.cell_value(i+1, 0)))
    else:
        pass

    #如果遇到空格,则说明本断面数据已读取完毕,进入下一断面
    if line == "":
        flag = 1

fo.close()


处理结果

【Python】03 河道横断面数据处理_第5张图片

数据文件及程序

请从附件下载。
请从附件下载。
请从附件下载。

重要事情说三遍。

你可能感兴趣的:(Python,python,数据处理,数据清洗,断面数据提取,格式转换)