2016-08-16 6 views
-2

長い番号のリストを持つテキストファイルがあります。私は非ゼロだけを選択し、別のテキストファイルを作成したいと思います。テキストファイル内の長い番号のリストから非ゼロのみを選択する

これは、入力ファイルの一部です:私は、私は以下の書いたものを試してみました

5.16677E-30 9.61708E-28 1.18779E-25 9.73432E-24 5.29352E-22 1.91009E-20                  
4.57336E-19 7.26588E-18 7.65971E-17 5.35806E-16 2.48699E-15 7.65973E-15  
1.56539E-14 2.12278E-14 1.91010E-14 1.14046E-14 4.51832E-15 1.18780E-15 
2.07196E-16 2.39824E-17 1.84193E-18 9.38698E-20 3.17431E-21 7.12271E-23  
1.06050E-24 1.04773E-26 

それ:

0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 
0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 
0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 5.16677E-30 
9.61708E-28 1.18779E-25 9.73432E-24 5.29352E-22 1.91009E-20 4.57336E-19 
7.26588E-18 7.65971E-17 5.35806E-16 2.48699E-15 7.65973E-15 1.56539E-14 
2.12278E-14 1.91010E-14 1.14046E-14 4.51832E-15 1.18780E-15 2.07196E-16 
2.39824E-17 1.84193E-18 9.38698E-20 3.17431E-21 7.12271E-23 1.06050E-24 
1.04773E-26 6.86848E-29 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 
0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 
0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 
0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 
0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 
0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 
0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 

うち上記入力ショーの一部を入れ予想は次のようになり何も返さない

r1=[] 
file = open ('aa2','w') 
with open('aa.txt') as m: 
    file.write('List') 
    file.write("\n") 
    for t in itertools.islice(m,500,6500): 
     for i in t: 
      if i != 0.00000E+00 : 
       d = i 

     k = re.search(r'([- ]\d+\.\d+)+' , d) 

     if k: 
      r1.append(k.group()) 
    file.write(str(' '.join(map(str,r1)))) 
file.close() 
+1

入力ファイルのサンプルテキストを表示して、どのような形式であるかを確認してから、期待される出力を表示します。 – Dan

+1

@ T.A。あなたの質問を編集して、サンプルの入力と出力を含めることができます。また、あなたのコードのインデントが失敗していることにも注意してください。それも修正してください。 –

+0

質問を編集します。それをコメントとして投稿しないでください。人々が容易に見ることができるようにフォーマットします。コメントから、数字が1つ以上のスペース、改行、タブなどで区切られているかどうかは分かりません。そうでなければ、ほとんどの人はこの質問をスキップします。私たちは、あなたが持っているものと、あなたを助けるために必要なものを理解しなければなりません。 [最小、完全、および検証可能なサンプルの作成方法の説明を読む](http://stackoverflow.com/help/mcve) – Dan

答えて

0

regexを使用している必要はありません。また、ファイル上でisliceを使用している場合は、非常に奇妙なことをしています。それも不要です。

import io                  

file = io.StringIO('''               
0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 
0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 
0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 5.16677E-30 
9.61708E-28 1.18779E-25 9.73432E-24 5.29352E-22 1.91009E-20 4.57336E-19 
7.26588E-18 7.65971E-17 5.35806E-16 2.48699E-15 7.65973E-15 1.56539E-14 
2.12278E-14 1.91010E-14 1.14046E-14 4.51832E-15 1.18780E-15 2.07196E-16 
2.39824E-17 1.84193E-18 9.38698E-20 3.17431E-21 7.12271E-23 1.06050E-24 
1.04773E-26 6.86848E-29 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 
0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 
0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 
0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 
0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 
0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00 
0.00000E+00 0.00000E+00 0.00000E+00 0.00000E+00        
'''.strip())                 

################################# 
# Actual Answer to your problem #                    
################################# 
values = []                 
for line in file:                
    values.extend(val for val in line.strip().split() if val != '0.00000E+00') 

with io.StringIO() as out:   
    for i, val in enumerate(values): 
     if i and not i % 6:   
      out.write('\n')   
     out.write(val+' ')   
    out.seek(0) 
    print(out.read()) 
関連する問題