2017-06-07 6 views
0

1つの列にあるcsvファイルにデータセットがありますが、列の各行には値を持つ列データであるデータが含まれています。私はどのようにデータを解析して、列データと関連する値であるかによってデータが分割されるようには分かりません。csv列を単語に基づいて複数の異なる列に分割するにはどうすればよいですか?

列A、行1:

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

列A、ROW2:

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からの分割の2番目の部分、空白のトリム付き)。これを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クルー、25、アナリスト
ジョン・ドウ、654321、バナナリパブリック、32、マネージャー

+0

出力を列に入れる必要があります。だから、名前の列には行の名前が違っています。 –

+0

それは上記の出力があなたに与えるものです。 – Alan

+0

データをコンマではなくスペースで区切りたい場合は、 'return '、' + second_part.strip()'行を 'return 'に変更します\ t' + second_part.strip()' - 後でそれを使う予定に応じて、引用符で囲むことも考えてみてください( '\ t'はタブ文字です) – Alan

関連する問題