Choosing only non-zeros from a long list of numbers in text file

梦想的初衷 提交于 2019-12-14 03:27:32

问题


I have a text file with a long list of numbers. I would like to choose only the non-zeros and make another text file.

This is a portion of the input file:

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

The expected out put for the portion of the input show above would be:

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

I tried what I wrote below but it is not returning anything.

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:


You're using regex again where you don't need to. You're also doing something exceedingly bizarre where you're using islice on the file. That's also unnecessary. You could just do this:

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())


来源:https://stackoverflow.com/questions/38980459/choosing-only-non-zeros-from-a-long-list-of-numbers-in-text-file

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!