2017-06-07 32 views
0

我在一列中的csv文件中有一個數據集,但列中的每一行都包含可能是具有值的列數據的數據。我不知道如何解析數據,以便數據按列數據和相關值分解。數據看起來是這樣的:如何根據單詞將csv列分成幾個不同的列?

列A,ROW1:

Name:Jane Doe 
ID:123456 
Company: J.Crew 
Allergies: None 
Age:25 
Job Title: Analyst 

A列,2行:

Name: John Doe 
ID: 654321 
Company:Banana Republic 
Allergies: peanuts 
Age:32 
Job Title:Manager 

有上百行類似這些,我想它會將數據轉換爲名稱列,ID列,公司列,年齡列,職位標題列。我想去除過敏物品。

csv文件示例:

enter image description here

+1

請編輯您的問題,並從文件中包含實際樣本數據(我們不需要整件事情,您可以更改數據以保護無辜者)。 – martineau

+0

行中沒有逗號?如果不是,那麼它不是CSV。你能添加實際文件的前幾行到你的問題嗎? –

+0

我附上了csv文件的樣本圖片。 –

回答

0

我會看一些示例代碼後,但這裏的邏輯:

  1. 創建一個字符串來保存新的數據(myNewData)
  2. 打開文件
  3. 逐行讀取文件中的行
  4. SP用冒號點燃線
  5. 確定在該行的第一個字(拆分的第一部分)
  6. 如果第一字不是「名稱:」和過敏,然後添加一個逗號和值(從4分割的第二部分,以及空白的修剪)。將此附加到myNewData中。
  7. 如果第一個字過敏,然後丟棄,並開始下一個循環
  8. 如果第一個字「姓名:」,然後添加一個換行符(「\ n」)和值。
  9. 當進程完成時,將myNewData寫入新文件。

如下代碼示例:

#! /usr/bin/env python 

def decider(line):  
    try: 
     first_part, second_part = lines.split(':') 
     if first_part not in ('Name', 'Allergies'): 
      return ',' + second_part.strip() 
     elif first_part == 'Name': 
      return '\n' + second_part.strip() 
     else: 
      return '' 
    except: 
     return '' 

with open('text.txt', 'r') as f: 
    myNewData = 'Name,ID,Company,Age,Job' 
    for lines in f.readlines(): 
     myNewData += decider(lines) 
    # print(myNewData) 
    with open('output.csv', 'w') as fo: 
     fo.write(myNewData) 

,你有一個不錯的,新的CSV。

的輸出如下:

姓名,ID,公司,年齡,工作
李四,123456,J.Crew的,25,分析師
李四,654321,香蕉共和國,32,經理

+0

我需要輸出成列。所以你有一列名稱與不同名稱的行。 –

+0

這就是上面的輸出會給你的。 – Alan

+0

如果你的意思是你想要用空格而不是逗號分隔數據,那麼你將'return','+ second_part.strip()'行改爲'return'\ t'+ second_part.strip()' - 你可能還想考慮用引號括起來,這取決於你之後計劃的內容('\ t'是製表符) – Alan

相關問題