Python中如何将以|为分隔符的员工信息txt文件转换为dat文件
Python实现|分隔符员工txt文件转dat文件方法
.dat没有统一的强制格式标准,属于业务自定义的结构化数据文件,以下实现基于Python标准库,不需要安装额外依赖,覆盖绝大多数通用业务场景。
实现步骤
- 提前确认源txt文件的编码(常见为utf-8、gbk),避免读取乱码
- 逐行读取源文件,清洗空行、首尾无效空白字符
- 校验每行字段数量,过滤不符合员工信息结构的脏数据
- 按业务要求的.dat格式写入目标文件,分两种常见场景提供代码:
场景1:输出纯文本格式dat(多数内部系统通用)
这类dat本质是改了后缀的结构化文本,保留原|分隔符即可,代码如下:
# 按需修改以下配置项 src_path = "员工信息.txt" tgt_path = "员工信息.dat" file_encoding = "utf-8" # 源文件是gbk编码就替换为"gbk" std_field_num = 5 # 替换为实际员工信息字段总数,比如工号/姓名/部门/入职日期/手机号共5项就填5 with open(src_path, "r", encoding=file_encoding) as f_src, \ open(tgt_path, "w", encoding=file_encoding) as f_tgt: for raw_line in f_src: line = raw_line.strip() # 跳过空行 if not line: continue fields = [item.strip() for item in line.split("|")] # 过滤字段数不对的异常行 if len(fields) != std_field_num: print(f"跳过异常行:{line},字段数不符合要求") continue # 写入清洗后的内容 f_tgt.write("|".join(fields) + "\n") print(f"转换完成,目标文件路径:{tgt_path}")
场景2:输出定长二进制格式dat(老系统兼容场景)
部分老旧系统要求dat为二进制定长存储,每个字段占固定字节长度,不足补空格、超长截断,代码如下:
# 按需修改配置项 src_path = "员工信息.txt" tgt_path = "员工信息.dat" file_encoding = "utf-8" # 按字段顺序配置每个字段的固定长度,比如工号10位、姓名20位、部门30位、入职日期10位、手机号11位 field_length = [10, 20, 30, 10, 11] with open(src_path, "r", encoding=file_encoding) as f_src, \ open(tgt_path, "wb") as f_tgt: for raw_line in f_src: line = raw_line.strip() if not line: continue fields = [item.strip() for item in line.split("|")] if len(fields) != len(field_length): print(f"跳过异常行:{line},字段数不符合要求") continue # 拼接定长二进制内容 bin_content = b"" for idx, val in enumerate(fields): # 长度不足右侧补空格,超长直接截断 processed_val = val.ljust(field_length[idx])[:field_length[idx]] bin_content += processed_val.encode(file_encoding) f_tgt.write(bin_content + b"\n") print(f"转换完成,目标文件路径:{tgt_path}")
注意:如果你的业务对dat文件有特殊要求(比如带文件头校验、字段加密、特殊分隔符),直接在写入环节对应调整处理逻辑即可,上述代码可作为基础框架直接修改使用。
内容的提问来源于stack exchange,提问作者Dev
相关产品推荐
相关产品推荐

