You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何过滤文本文件指定行并将数据导入PostgreSQL数据库

实现方案

1. 过滤文件保留目标行

Linux/macOS 环境

直接使用grep命令即可完成过滤,执行以下命令:

grep -E '^(Expiry:|object:|object_id:)' 原始文件路径.txt > 过滤后文件.txt

参数说明:-E启用扩展正则匹配,^匹配行首,仅保留三个指定前缀开头的行,结果输出到新的过滤文件中。

Windows 环境

使用PowerShell执行以下命令:

Select-String -Path "原始文件路径.txt" -Pattern '^(Expiry:|object:|object_id:)' | ForEach-Object { $_.Line } | Out-File "过滤后文件.txt" -Encoding UTF8

2. 数据导入PostgreSQL

2.1 预处理过滤后文件为结构化CSV

过滤后的文件为每3行对应一条业务记录,我们可以用简单的Python脚本转换为CSV格式方便导入:

import csv

# 读取过滤后的文件
with open("过滤后文件.txt", "r", encoding="utf-8") as f:
    valid_lines = [line.strip() for line in f if line.strip()]

result = []
# 按3行一组拆分单条记录
for idx in range(0, len(valid_lines), 3):
    item = {}
    for line in valid_lines[idx: idx+3]:
        # 按第一个冒号拆分键值对
        key, value = line.split(":", maxsplit=1)
        item[key.strip()] = value.strip()
    # 按你需要的字段顺序整理行
    result.append([item["object_id"], item["object"], item["Expiry"]])

# 写入CSV文件
with open("导入数据.csv", "w", encoding="utf-8", newline="") as f:
    writer = csv.writer(f)
    # 写入表头,导入时可直接跳过首行
    writer.writerow(["object_id", "object", "expiry"])
    writer.writerows(result)

2.2 创建PostgreSQL目标表

首先在数据库中执行建表语句,字段类型可根据实际业务调整:

CREATE TABLE IF NOT EXISTS business_data (
    object_id VARCHAR(10) PRIMARY KEY,
    object VARCHAR(50) NOT NULL,
    expiry DATE NOT NULL
);

2.3 执行导入

如果是本地客户端连接PG,使用psql的\copy命令导入速度最快:

-- 先调整日期格式适配你文件中的ddmm/yyyy格式
SET datestyle = 'ISO, DMY';

-- 导入CSV,HEADER true表示跳过首行表头
\copy business_data FROM '/本地路径/导入数据.csv' WITH (FORMAT csv, HEADER true, DELIMITER ',', ENCODING 'utf8');

-- 恢复默认日期格式
RESET datestyle;

如果是在PG服务端导入,把\copy换成COPY即可,注意文件路径需要是服务端可访问的路径。

注意事项

  • 如果你的原始文件中三个指定前缀的行顺序不固定,上述Python处理脚本通过键名取值不受顺序影响,无需额外调整
  • 数据量超过10万行时,直接用COPY命令比逐行INSERT效率高10倍以上

内容的提问来源于stack exchange,提问作者nick

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 09:12:05