【问题标题】:Choosing only non-zeros from a long list of numbers in text file从文本文件中的一长串数字中仅选择非零
【发布时间】:2016-08-16 16:52: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  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

上述输入部分的预期输出将是:

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

我尝试了我在下面写的内容,但没有返回任何内容。

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

【问题讨论】:

  • 显示输入文件中的示例文本,以便我们知道它的格式。然后显示预期的输出。
  • @T.A.你可以edit你的问题包括样本输入和输出。另请注意,您的代码缩进搞砸了。请也解决这个问题。
  • 编辑问题。不要将其发布为 cmets。以人们容易看到的方式格式化它。 cmets 不清楚这些数字是否由一个或多个空格、换行符、制表符等分隔。否则大多数人会跳过这个问题。为了帮助您,我们必须了解您拥有什么以及您想要什么。 Read this explanation of How to create a Minimal, Complete, and Verifiable example.
  • 我为第一篇文章道歉。我进行了建议的更改

标签: python list numbers


【解决方案1】:

您在不需要的地方再次使用正则表达式。在文件上使用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())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多