2016-06-23 7 views
0

多くのファイルを読み込み、これらのファイルから特定の列に別のファイルに書き込もうとしています。私はそれがどのようにできるのかを読んだが、うまくいかない。私のスクリプトにpawkを実装するのに助けてくれますか?python多くのファイルから特定の列を1つのファイルに書き込む

j = j + 1 
    #with open('a1_gather_{j}.txt'.format(j=j)) as f2: 
    f2 = open('a1_gather_{j}.txt'.format(j=j), 'w') 
     k=k+1 
     print k 
     f1 = open('a1_{k}'.format(k=k)) 
     # with open('a1_{k}'.format(k=k), 'a') as f1: 
     lines = f1.readlines() 
     for i, line in enumerate(lines): 
      print i 
      if line.startswith(searchquery): 
       f2.write(line) 
       f2.write(lines[i + 1]) 
       f2.write(lines[i + 2]) 
       i = i+1 
      else : 
       i = i+1 
     #os.close(f1) 
     f1.close() 

# awk '{a[FNR]=a[FNR]?a[FNR]" "$2:$2}END{for(i=1;i<=length(a);i++)print a[i]}' * 

f2.close() 

私はエラーIOError: (9, 'Bad file descriptor')を避けるためにf = openの代わりwith open好ましいです。

読み込むファイルには、1000行と2つの列があります。別のファイルに書き込むためには、各ファイルの2番目の列だけが必要です。

誰かが自分のスクリプトを修正して、どのようにしてポークを使用できるのかを示すことができますか?

+0

これを行うには、それを行う必要がありますか、それともこれを行うだけですか?あなたがawkを使用するなら、はるかに簡単です! –

+0

これを行うだけです。私はawkを探して、私はpython – GeMa

+0

のためにポークのためのポストだけを見つけましたか? – karakfa

答えて

0

あなたはa1_gatherファイルにa1_*ファイルから2番目の列を書き、あなたがコメントで述べたようにあなたは、端末に簡単なコマンドを実行することができawkのを使用する必要があると仮定:

cat a1_* | awk '{print $2}' > a1_gather 

どこ:

  • cat a1_*は、ファイル名がa1_で始まるすべてのファイルからを表します。
  • awk '{print $2}'
  • > a1_gatherですから学ぶあなたが将来的にはawkを使用して、より興味がある場合はa1_gather

this is really useful tutorialをファイルに保存しプリント第二のカラムを意味します。

+0

このコマンドラインだけで十分ですか?または、ループ全体を実行する必要がありますか? awkはループの一部ですか? – GeMa

+0

ええ、このコマンドラインはあなたが望むようにするとします。 –

+0

よく私は専門家ではありませんが、これは機能しません。スクリプトの構文と場所を把握する必要があります。いずれにせよありがとう! – GeMa

1

この特定のタスクのために、あなたは完全にパイソンを放棄でき、代わりにcutのコマンドを使用します。デフォルトでは

cut -f2 a1_{1..10}.txt > a1_gather.txt 

を、それが列セパレータとしてタブを使用して、-dオプションは、それを変更することができます。

{start..stop}表記法を使用すると、一致するファイルを細かく制御できます。

0
f2 = open('a1_gather_{j}.txt'.format(j=j), 'w') 
    f1 = open('a1_{k}.txt'.format(k=k)) 
    lines = f1.readlines() 
    for i, line in enumerate(lines):  
     print(repr(line))     
     f2.write(line) 
     i = i+1 
    f1.close() 
f2.close() 

これは、行全体を読み書きします。私もこれで作業することができますが、どのようにして2番目の列だけを読み書きできるかについての知識はありがたいです。

関連する問題