2016-10-26 7 views
0

値...分割列に基づいて、CSVの複数の行への行は、私は以下に示すように、CSVを有し、DBにロードするために、カラム3の値に基づいて複数の行にCSVファイルを解析する必要

に起因制限私はこの機能を行うにはimport csvモジュールを使用することができ、それは私が立ち往生している問題です、私は挿入クエリを書く場合は..それはすべての行をフェッチしていない..それは、

:とテーブルに

1,2,3,4,5 
10,20,30,50 
100,200,300,400 

可能なコードを挿入

if column 3 = 'y' else 'n' in column 4 in table 

出力:

1,2,3,y 
1,2,4,n 
1,2,5,n 
10,20,30,y 
10,20,50,n 
100,200,300,y 
100,200,400,n 

ここでは、私はあなたが定数として第一2列を維持し、上のすべての次の番号の存在のために新しい行を作りたいと仮定しています私のコード

import csv 

import os 

#Test-new to clean.csv 
fRead=open("clean.csv") 
csv_r=csv.reader(fRead) 
#to skip first two lines 
leave=0 
for record in csv_r: 
    if leave<2: 
     leave+=1 
     continue 
    #storing the values of column 3,4,5 as an array 
    JMU=[] 

    for t in [2, 3, 4]: 
     if not(record[t] in ["", "NA"]): 
      JMU.append(record[t].strip()) 
      #print len(JMU) 
      #print "2" 
    if len(JMU)==0: 
     #print "0" 
     pass 
    else: 

#check if the name contains WRK 
     isWRK1 = "Table" 
     for data in JMU: 
      print data 
      if data[:3].lower()=="wrk" or data[-3:].lower()=="wrk": 
       isWRK1="Work" 
       print isWRK 
      else: 
       isWRK = "table" 
     #check if column 2 value is "Yes" or "No"  
     fourthColumn="N" 
     if not(record[2] in ["", "NA"]): 
      #print record[2] 
      if record[3].strip().lower()=="no": 
       # print record[3] 
       fourthColumn = "I" 
      else: 
       fourthColumn = "N" 

     for i in JMU: 
      iWRK = "Table" 
      if record[2]==i: 
       newRecord = [record[0], record[1], i, fourthColumn, isWRK,] 
       #print newRecord 
      elif record[3] == i: 


       newRecord = [record[0], record[1], i, "N", isWRK] 
       #print newRecord 
      else: 

       newRecord = [record[0], record[1], i, "N", isWRK] 
     print ("insert into table (column_a,column_b,column_c,column_d,column_e) values (%s,%s,%s,%s,%s)"% (record[0],record[1],record[2],record[3],record[4])) 



fRead.close() 
fWrite.close() 
+0

probがありますかあなたが持っている解決策を教えてください、あるいはあなたが始める場所をお探しですか? –

+0

あなた自身でこれを試みる必要があります。これは人々があなたのためにコードを書く場所ではありません。 – bravosierra99

+0

ようこそStackOverflowへ。ヘルプドキュメントの投稿ガイドラインを読み、それに従ってください。 [on topic](http://stackoverflow.com/help/on-topic)および[How to Ask](http://stackoverflow.com/help/how-to-ask)をここで適用してください。 StackOverflowは、コーディングまたはチュートリアルサービスではありません。投稿した内容から、CSVファイルの読み方が分からないように見えます。これは、あなたがオンラインで調べるものです。 – Prune

答えて

1

です同じ入力行。

は当初、私はこの1-ライナーawkコマンドを思い付いた:

$ cat data 
1,2,3,4,5 
10,20,30,50 
100,200,300,400 
$ awk -F, -v OFS=, '{for(i=3;i<=NF;i++) print $1, $2, $i, (i==3?"y":"n")}' data 
1,2,3,y 
1,2,4,n 
1,2,5,n 
10,20,30,y 
10,20,50,n 
100,200,300,y 
100,200,400,n 

そして私はcsvモジュールを使用してのpythonに同じ複製:

import csv 
with open('data', 'r') as f: 
    reader=csv.reader(f) 
    for row in reader: 
     l=list(map(int, row)) 
     for i in range(2, len(l)): 
      print(l[0], l[1], l[i], 'y' if i==2 else 'n', sep=',') 

、ここでは、サンプル実行はありますはawkの出力と同じです:

1,2,3,y 
1,2,4,n 
1,2,5,n 
10,20,30,y 
10,20,50,n 
100,200,300,y 
100,200,400,n 
関連する問題