繁体   English   中英

如何使用python将大文本文件中的列拆分为3列?

[英]How to split column into 3 column in large text file using python?

我有一个 1 GB 的文件。 我想阅读它并将一列分成 3 个单独的列。

有一列 - COMPONENT_IDS ,我需要把它分成三个新的列 - DOC_ID, DOC_TITLE, PROD

例子:

We have to split COMPONENT_IDS  into 3 columns (DOC_ID, DOC_TITLE, PROD) use ; as seperator. For a "##" seperator, it should come as multiple records
For example INK-MET-100 vs 300;INVOKANA - 100 vs 300 mg as a Starting Dose;Invokana##ENC-010864-13;INVOKANA PI and Med Guide - May 2014;Invokana

COMPONENT_IDS
INK-MET-100 vs 300;INVOKANA - 100 vs 300 mg as a Starting Dose;Invokana
ENC-010864-13;INVOKANA PI and Med Guide - May 2014;Invokana

DOC_ID                DOC_TITLE                                     PROD
INK-MET-100 vs 300    INVOKANA - 100 vs 300 mg as a Starting Dose   Invokana
ENC-010864-13         INVOKANA PI and Med Guide - May 2014          Invokana

下面的 Python 脚本可能会帮助你。 您可以根据需要更改 "format("DOC_ID", 40)" 等的整数值 40。 下面的脚本正在读取您的数据文件并将其转换为 3 列并将其重定向到您的输出文件。 通过在这里使用循环,我们可以避免高内存利用率问题。

$ cat test --> 原始文件

COMPONENT_IDS

INK-MET-100 与 300 对比;INVOKANA - 100 与 300 毫克作为起始剂量;Invokana

ENC-010864-13;INVOKANA PI 和 Med 指南 - 2014 年 5 月;Invokana

$ cat test.py --> Python 脚本

将熊猫导入为 pd

fopen=open('test') # 原始文件

fout=open('output','w') # 输出文件

print('{: <{}}'.format("DOC_ID", 40),'{: <{}}'.format("DOC_TITLE", 60),'{: <{}}'.format(" PROD", 40),file=fout)

因为我在 fopen:

    if i.startswith('COMPONENT_IDS'):

           continue

    else:

            (DOC_ID, DOC_TITLE, PROD)=tuple(i.strip().split(';'))

            print('{: <{}}'.format(DOC_ID, 40),'{: <{}}'.format(DOC_TITLE, 60),'{: <{}}'.format(PROD, 40),file=fout)

$ python3 test.py --> 脚本执行

$ cat 输出

DOC_ID DOC_TITLE PROD

INK-MET-100 与 300 INVOKANA - 100 与 300 mg 作为起始剂量 Invokana在此处输入图像描述ENC-010864-13 INVOKANA PI 和 Med 指南 - 2014 年 5 月 Invokana

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM