[英]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.