2017-07-05 7 views
0

コードの何が問題なのかわからないので、シェルからエラーメッセージが表示されません。 私は何をしようとしていることである:1行を1つのファイルにコピーする方法

  1. は(行ごとに単一の文字列と1つの列を持つ)1つのリストにディレクトリからすべてのリストファイルをマージ - やりました!
  2. ビッグファイルとそのリストを比較し、すべての単一の通信線を各行の新しい単一ファイルにコピーします。しかし、働いていない。 =/
  3. 手順2のファイルを新しいoutput_directoryに保存します。 - 働いていない。
  4. ビッグファイルから対応する行を削除して、同じoutput_directoryに保存します。これは考えられません。

手順2で使用したのと同じ文字列を使用して、出力 'singlelinefiles'に名前を付けることは可能ですか?誰も私にどのように表示できますか? それはずっと

をいただければ幸いここでのコードは、これまでのところです:

#!/usr/bin/python 

import os, sys, glob 

#use: thisone.py <lists_dir><majorfile><out_dir> 

lists = glob.glob(sys.argv[1]+ '*.txt') 
listsmatrix = [] 
for line in lists: 
    listsmatrix.append(line.strip().split('\n')) 

majorfile = open(sys.argv[2],'r') 
majormatrix = [] 
for line in majorfile: 
    majormatrix.append(line.strip().split('\t')) 

os.mkdir(sys.argv[3]) 

i=0 
for line in majormatrix: 
    if line [0] in listsmatrix: 
     outfile = open(sys.argv[3]+ 'file'+str(i), 'w') 
     outfile.write(line) 
     outfile.close() 
     i+=1 

私はあなたから任意の助けに感謝することでしょう。

答えて

0

'w'でファイルを開くと、ファイルが消去されます。したがって、ファイルを開くたびに、新しい行が前の行を上書きします。

2つの解決策:あなたがファイルに追加するのではなく、それを上書きしているので、

1)は、「A」と「W」に置き換えます。

2)理想的に使用して、一度ファイルを開いてブロック「が」ファイルは、例外が発生した場合でも正しく閉じられますように:

with open(sys.argv[3]+ 'file'+str(i), 'w') as outfile: 
    for line in majormatrix: 
     if line [0] in listsmatrix: 
      outfile.write(line) 
      i+=1 
+0

はあなたに男をありがとう!しかし、それはまだ動作していません。 これで、出力ファイルが作成されますが、output_directoryの外側に空のファイルが作成されます。 – shun

関連する問題