在python中拆分数据以形成表

时间:2017-07-23 10:27:58

标签: python

问题是:我有一个要清理的数据集。我目前在PyCharm(社区版)中使用Python 3.6作为intrepreter来处理这个问题。

我需要:

  1. 找到显示“代码”一词的行
  2. 将所有以下行粘贴在一行中,直到
  3. 下一个单词“Code”来了
  4. 这基本上会将数据分成2个字段,即;公司的代码和细节。

    最终输出需要在文本文件中的表中,或者通过Pycharm本身写入csv,这种格式很重要。

    以下是输入(从实际文本文件中提取):

    345- Code # 98882 +
    "Ms, ABDUL RAFAY & COMPANY, +"
    "907, 2nd Floor, tradeway Centre,33, Block-6, PECHS, Karach +"
    Ph:345598 1334 558106 +
    Mr. Abdul rafay Siddiqui +
    347 Code # 96663 +
    "Ms. BILAL & BROTHERS Plot No.F-8, Estate #2, Lalazar, Karachi Ph:322575.84 +"
    Mr. Mubarak Shahid +
    A23 - Code : BO229 +
    "Ms. RAHMAN & SONS 303, 3rd Floor, Square One, Dundas street, Karachi P:36268947 +"
    "Mr, Saleem Mughal +"
    "349- Code # 93369 Ms, ALIAPPAREL +"
    "Office No. 491/307, 1st  Floor, Blessings Tower near Tipu Burger , P?:34990456 +"
    "Mr, Nasir Wali  +"
    

    输出应该是这样的:

    Code  -  Company details 
    345- Code # 98882 + -"Ms, ABDUL RAFAY & COMPANY, +""907, 2nd Floor, tradeway Centre,33, Block-6, PECHS, Karach +"Ph:345598 1334 558106 +Mr. Abdul rafay Siddiqui +
    347 Code # 96663 +  - "Ms. BILAL & BROTHERS Plot No.F-8, Estate #2, Lalazar, Karachi Ph:322575.84 +"Mr. Mubarak Shahid +
    

    数据的关键在于公司的详细信息有时会在一行或两行或三行中。因此,如果可以有一种方法来迭代这些,直到出现下一个“代码”。我曾经在R中试过这个但是除了添加+之外没有任何具体的东西可以在这里被剥离。

1 个答案:

答案 0 :(得分:1)

您需要做的就是遍历文件,查找指示新数据块开始的行。

这或多或少都符合您的要求:

def emit(lines, dest):
    if lines:
        print("".join(lines), file=dest)

company_data = []

with open('details.txt') as data_in, open('fixed_details','w') as data_out:
    for line in data_in:
        if "Code " in line: # start of a new company: output the previous one
            emit(company_data, data_out)
            company_data = []
        company_data.append (line.strip())
    emit(company_data, data_out)

它没有完全你想要什么,因为你的样本输出有时指定公司代码和其他数据之间的连字符,有时是连字符和空格。

345- Code # 98882 + -"Ms, ABDUL RAFAY ...(etc)
347 Code # 96663 +  - "Ms. BILAL & BROTHERS ...(etc)
                     ^ this is the space

在行345中没有空格,但在行347中有。您的示例输入数据中没有相应的空格,因此不清楚您希望程序执行的操作。我刚离开连字符。我会把排序(并提供标题)排除给你。您可能希望更改print()调用以区分第一行数据和其他数据:

print(lines[0], "-", "".join(lines[1:]), file=dest)

这是输出:

345- Code # 98882 +"Ms, ABDUL RAFAY & COMPANY, +""907, 2nd Floor, tradeway Centre,33, Block-6, PECHS, Karach +"Ph:345598 1334 558106 +Mr. Abdul rafay Siddiqui +
347 Code # 96663 +"Ms. BILAL & BROTHERS Plot No.F-8, Estate #2, Lalazar, Karachi Ph:322575.84 +"Mr. Mubarak Shahid +
A23 - Code : BO229 +"Ms. RAHMAN & SONS 303, 3rd Floor, Square One, Dundas street, Karachi P:36268947 +""Mr, Saleem Mughal +"
"349- Code # 93369 Ms, ALIAPPAREL +""Office No. 491/307, 1st  Floor, Blessings Tower near Tipu Burger , P?:34990456 +""Mr, Nasir Wali  +"