问题是:我有一个要清理的数据集。我目前在PyCharm(社区版)中使用Python 3.6作为intrepreter来处理这个问题。
我需要:
这基本上会将数据分成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中试过这个但是除了添加+之外没有任何具体的东西可以在这里被剥离。
答案 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 +"