# 管道pcf文件信息提取 **Repository Path**: xiaoleiao/pcf-analysis ## Basic Information - **Project Name**: 管道pcf文件信息提取 - **Description**: 解决石油化工行业管道提取材料信息困难的难题,针对设计下发的PCF文件快速提取管道材料清单等信息。目前解决了: 1.传统 PDMS/AVEVA Plant经典标准 PCF; 2.新版 AVEVA Everything3D/国产三维配管软件(SPDA/PDSOFT)导出的定制化 PCF; - **Primary Language**: Python - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2026-07-03 - **Last Updated**: 2026-09-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README <<<<<<< HEAD # PCF 提取到 xlsx 这个脚本把 `PCF文件/` 中的 `.pcf` 文件解析成结构化行,再按 JSON 配置输出到 xlsx。 ## 安装依赖 ```bash pip install -r requirements.txt ``` ## 运行 ```bash python pcf_to_xlsx.py --input "PCF文件" --config pcf_config.example.json --output outputs/pcf_extract.xlsx ``` ## 图形界面运行 如果希望通过窗口选择 PCF 文件夹和保存文件夹,运行: ```bash python pcf_gui.py ``` 窗口里可以选择: - `PCF 文件夹`:会递归提取该目录及其所有子目录中的 `.pcf` 文件。 - `保存文件夹`:xlsx 输出目录。 - `配置文件`:默认使用 `pcf_config.example.json`。 点击 `开始提取` 后,界面会显示执行日志和进度。 进度按 PCF 文件逐个刷新:每处理完一个文件,日志和进度条都会立即更新。 不安装 `openpyxl` 时,也可以先检查解析结果: ```bash python pcf_to_xlsx.py --input "PCF文件" --config pcf_config.example.json --dry-run --limit 5 ``` 查看不同 PCF 文件里有哪些字段可配置: ```bash python pcf_to_xlsx.py --input "PCF文件" --dump-keys --dry-run --limit 0 ``` ## 配置字段 `pcf_config.example.json` 的 `columns` 控制输出列。`title` 是 xlsx 标题,`source` 是提取规则。 不同设计院或软件来源应使用不同配置文件。传统 PDMS/AVEVA Plant 示例配置是 `pcf_config.example.json`;国产/Everything3D 风格示例配置是 `pcf_config.domestic.example.json`。字段语义完全按配置执行,程序不会自动猜测 `ATTRIBUTE9` 或 `ATTRIBUTE108` 哪个是版本日期。 示例: ```json { "title": "管线号", "source": "ATTRIBUTE37" } ``` 如果另一个设计院把管线号放在 `ATTRIBUTE121`,只改成: ```json { "title": "管线号", "source": "ATTRIBUTE121" } ``` 组合字段使用 `+`,字符串常量用引号: ```json { "title": "单线图号", "source": "ATTRIBUTE37+'-'+ATTRIBUTE38" } ``` 导出版本信息这类 PCF 头部字段时,直接把字段名放到 `source`: ```json { "title": "版本信息", "source": "ATTRIBUTE108" } ``` 区域也一样,例如 `ATTRIBUTE33 G313`: ```json { "title": "区域", "source": "ATTRIBUTE33" } ``` 也可以明确指定字段来源: ```json { "title": "材料描述", "source": "material.DESCRIPTION" } ``` 支持的来源前缀: - `header.字段名`:PCF 头部字段,例如 `header.ATTRIBUTE37` - `component.字段名`:组件块字段,例如 `component.COMPONENT-ATTRIBUTE3` - `material.字段名`:底部 `MATERIALS` 字段,例如 `material.ITEM-CODE` - `builtin.字段名`:脚本内置字段,例如 `builtin.length` 不写前缀时,脚本按 `builtin -> component -> material -> header` 查找。 ## MATERIALS 对应关系 脚本兼容两种物料结构。 传统 PCF 中,组件块里的 `MATERIAL-IDENTIFIER 1` 会自动关联到底部: ```text MATERIALS MATERIAL-IDENTIFIER 1 ITEM-CODE PBEBA3744 DESCRIPTION ... ``` 国产/Everything3D 风格 PCF 中,组件块内直接带有: ```text ITEM-CODE PJEQFS3810JZZL3_01 ITEM-DESCRIPTION 90-锻制弯头,CL3000,A182 F316,SW,ASME B16.11 ``` 这种情况下会优先使用组件内的 `ITEM-CODE` 和 `ITEM-DESCRIPTION`。尾部 `MATERIALS` 中按 `ITEM-CODE` 分块的内容只作为补充描述来源。 所以配置 `ITEM-CODE` 或 `DESCRIPTION` 时,脚本会按当前 PCF 的物料结构自动取到对应编码和描述。 组件块里如果有: ```text MATERIAL-LIST EXCLUDE ``` 表示该组件不进入材料清单,脚本默认会整行排除,不参与 `length` / `length-detail` 输出。 ## 长度计算 长度基于 PCF 坐标,默认单位跟 `UNITS-CO-ORDS` 一致,样例中是 `MM`。 默认规则: - `ELBOW`:默认按 `END-POINT1 -> CENTRE-POINT -> END-POINT2` 折线长度计算,即 `END-POINT1` 到 `CENTRE-POINT` 的距离加上 `CENTRE-POINT` 到 `END-POINT2` 的距离。 - `TEE` / `CROSS` / `OLET` 等带 `BRANCH*-POINT` 的组件:主管按两个 `END-POINT` 距离,支管按 `CENTRE-POINT` 到每个 `BRANCH*-POINT` 距离。 - `REDUCER`、`PIPE`、`FLANGE`、`VALVE` 等普通两端点组件:按端点直线距离。 - `length-detail` 会按寸径汇总,例如 `16寸:913.892;12寸:659.892`。 如果管段想优先使用 `CUT-PIECE-LENGTH`,把配置改为: ```json { "length": { "pipe_length_source": "cut_piece_length" } } ``` ## 规格列 示例配置里已经增加了 `规格` 列: ```json { "title": "规格", "source": "size_spec" } ``` ## 坐标信息列 示例配置里已经增加了 `坐标信息` 列: ```json { "title": "坐标信息", "source": "coordinate_info" } ``` 输出会按 PCF 组件块中的点顺序拼接 `END-POINT`、`CENTRE-POINT`、`BRANCH*-POINT`、`CO-ORDS` 等坐标,例如: ```text END-POINT(4393730.949,6134550,120468.732 0.75,PL);END-POINT(4392619.202,6134550,120468.732 0.75,PL) ``` 可在配置中调整分隔符,或者关闭寸径/连接形式: ```json { "coordinate_info": { "point_separator": ";", "coordinate_separator": ",", "include_size": true, "include_connection": true } } ``` `size_spec` 从坐标点里的寸径生成,并用 `X` 连接。例如两端异径件会得到 `2X1.5`,三通可能得到 `16X16X12`,四通可能得到 `120X120X72X72`,支管台会得到 `16X0.5`。 如果希望同一个组件里相同寸径只保留一次,把配置改成: ```json { "size_spec": { "separator": "X", "deduplicate": true } } ``` ======= # 管道pcf文件信息提取 #### 介绍 解决石油化工行业管道提取材料信息困难的难题,针对设计下发的PCF文件快速提取管道材料清单等信息。目前解决了: 1.传统 PDMS/AVEVA Plant经典标准 PCF; 2.新版 AVEVA Everything3D/国产三维配管软件(SPDA/PDSOFT)导出的定制化 PCF; #### 软件架构 软件架构说明 #### 安装教程 1. xxxx 2. xxxx 3. xxxx #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. Gitee 官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解 Gitee 上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目 5. Gitee 官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/) >>>>>>> 34c26e71cc78873cc51adb3b752e9799b5d63a53