2016-05-03 11 views
0

PythonでSQLクエリの出力を解析しようとしています(組織の制約のためにcx_Oracleをインストールできないため、日付が意味をなすようにするための方法は、ここで。Python split( ' n')は、行の終わりの代わりに途中で改行する

がサブプロセスのコマンド

output1 = sqlplus.communicate()[0].split('\n') 

['', '05/02/2016 19:42:40,ABC,O\t\t\t\t ,ACTIVE', '\t 49', '', '05/02/2016 19:42:40,ABC,O\t\t\t ,INACTIVE', '\t 11', ''] 

の私の出力ですが、私はすべての空白とタブを削除しようとしているが、私に頭痛を与えている1つの列があります。

私が以前の出力から余分なものを削除しようとすると、以下のコードe、最後の列は、同じ行に残るのではなく、次の行にバンプされます。私はそれがおそらく最後の列の先頭の\ t(タブ)のためだと知っていますが、私はそれを削除することはできません。私はストリップ、lstrip、rstrip、regexesを使って何時間も試してきましたが、役に立たないものです。以下は

for line in output1: 
    if(line != ''): 
      print ",".join([str(x.strip()) for x in line.split(',')]) 

私の最終的な出力ですが、次の行の最後の列

05/02/2016 19:53:52,ABC,O,ACTIVE 
49 
05/02/2016 19:53:52,ABC,O,INACTIVE 
11 

と私は欠けているものを見つけるいくつかの助けを必要としています。あなたは各行があなたのリストに空の文字列の間の文字列になりたいように、すべての入力を事前に感謝:)

--Jim

+1

あなたの 'output1'は、'最後の列 "が実際に' communications() '出力の新しい行にあることを示しているようです。 'ACTIVE'の直後に2番目の文字列がどのように終わっているかを見て、' \ t 49''が3番目の文字列であることを見てください。あなたは外部コマンドの出力があなたの考え方に見えると確信していますか? – user2357112

+1

おそらく外部コマンドが行折り返しを挿入して、独自の行折り返しをしようとしています。 – user2357112

+0

あなたのコードは、空文字列を無視し、コンマ区切りの値でコンマの周りの空白を削除します。しかし、リストの別々の要素を1つの行にまとめることはできません。 – Barmar

答えて

1

に見えますか?これらの空文字列はsplit()によって '/ n/n'に作成されるので、空白行があるところです。あなただけの最初にこれらの空白行に分割することができます:あなたはその後、代替品のシリーズを使用することができます

output1 = '\n05/02/2016 19:42:40,ABC,O\t\t\t\t ,ACTIVE\n\t 49\n\n05/02/2016 19:42:40,ABC,O\t\t\t ,INACTIVE\n\t 11\n' 
output1 = output1.split('\n\n') 

、スペースを除いてコンマと空白で分割し、分割ストリップ、および再組み立てすることが合流します。

for line in output1: 
    line = line.replace(' ', '(^_^)') 
    line = line.split() 
    line = [word.replace('(^_^)', ' ').strip() for word in line] 
    line = ','.join([word.strip(',') for word in line]) 
    print line 
+0

あなたのメソッドは機能しましたが、一度だけ外されました... 、INACTIVE '、' \ t 4 '、 これについて何をしますか? –

+0

あなたが提供した出力にそのケースは表示されません。 sqlplusの出力形式を記述するか、またはサブプロセスを含めることができますか.Popenまたはsubprocess.call呼び出し? – ipsnicerous

+0

最後に、私はこのようにしました。(正規表現を適用して、必要な文字のみを選択してからカンマで区切ります) 行= re.sub( "[^ 0-9、a-zA-Z:\ /]"これは間違いなく私の実際のデータの周りにいくつかのスペースを残しますが、私はOracleに戻って材料を挿入しているので、私はOracle TRIM()を使って複数の空白を削除しました。助けて! –

関連する問題