忽略ascii文件中的一些文本

时间:2015-04-17 04:17:56

标签: python merge save

感谢您花时间阅读它。  我有这样的数据(我只会显示几行,因为它是almos 3000行)

evento_T_A.ascii

2015-04-15T07:00:52.260000  15842
2015-04-15T07:00:52.270000  10292
2015-04-15T07:00:52.280000  10845
2015-04-15T07:00:52.290000  13727
2015-04-15T07:00:52.300000  13496
2015-04-15T07:00:52.310000  11406
2015-04-15T07:00:52.320000  9494
2015-04-15T07:00:52.330000  11018
2015-04-15T07:00:52.340000  11873
2015-04-15T07:00:52.350000  10749
2015-04-15T07:00:52.360000  11761
2015-04-15T07:00:52.370000  12352
2015-04-15T07:00:52.380000  11365
2015-04-15T07:00:52.390000  13574

我做了一些编程(不是pythonic方式)忽略2015-04-15T所有这些单词并且只是试图保持

07:00:52.260000 15842 07:00:52.270000 10292 ... 07:00:52.390000 13574

这是我的代码

ff=open('evento_T_A.ascii','r')
tiem=[]
for line in ff:
     line=line.strip()
     columns=line.split()
     Tiempo=columns[0]
     Amplitud=columns[1]
     Tiemp=str(Tiempo)
     if "T" in Tiemp:
          tiem=Tiemp[11:]
          print (repr(tiem))
     else:
          print "None"
ff.close()
outo=open('XY.txt','w')
for line in tiem:
    outo.writelines(repr(tiem))
outo.close()

但是当我打开XY.txt时,我只得到最后一个值而不是所有原始数据。 当我执行步骤print (repr(tiem))时,我可以看到所有数据,但当我outo.writelines(repr(tiem))时,它只保存了一行。

我的第一个疑问: - 我如何合并Tiempo和Amplitud看起来像这样:

07:00:52.260000  15842 
07:00:52.280000  10845
07:00:52.360000  11761
...
07:00:52.390000  13574
  • 如何只用一个txt写入所有数据?

非常感谢你花时间阅读它 -

Tonino

3 个答案:

答案 0 :(得分:0)

你的第一个问题不是你如何写清单;这就是你不首先建立清单。

你开始时很好,有一个空列表:

tiem=[]

但是,不要一个接一个地添加行,而是继续用每个最新行的值替换它:

tiem=Tiemp[11:]

如果要将行附加到列表,请使用append方法:

tiem.append(Tiemp[11:])

现在tiem是每个第11列的列表,而不仅仅是最后一列。


您的下一个问题您如何编写列表:

for line in tiem:
    outo.writelines(repr(tiem))

使用现有代码,tiem是一个字符串(代表最后一次),因此for line in tiem循环遍历当时的字符。然后,对于每个字符,您忽略该字符并写出repr(tiem),这是整个字符串的字符串表示形式。所以,你再写'13574',然后再写'13574',然后'13574''13574''13574'。

第一次修复后,情况变得更糟。现在,对于行列表中的每一行,您将打印所有行的repr。所以,你要连续3000次打印['15842', '10845', '11761', blah blah, '13574']次。

最大的问题是你用整个列表调用writelines,每个元素一次。只做一个或另一个。之一:

outo.writelines(tiem) # note no for loop

......或......

for line in tiem:
    outo.write(line) # note, line, not tiem

请注意,我也摆脱了repr。这就是额外的引号,括号,可能是一些反斜杠等来自的地方。你明确要求的不是字符串本身,而是要创建该字符串的Python文字。你不希望这样,不要这样做。


下一个问题是您没有在任何地方添加任何换行符。但这很容易:

for line in tiem:
    outo.write(line + '\n')

最后,你如何扩展它以将两列放在一起?

你可以建立两个列表,tiem表示时间,amp表示振幅,然后zip将它们放在一起。

全部放在一起:

ff=open('evento_T_A.ascii','r')
tiem, amp = [], []
for line in ff:
     line=line.strip()
     columns=line.split()
     Tiempo=columns[0]
     Amplitud=columns[1]
     Tiemp=str(Tiempo)
     if "T" in Tiemp:
          tiem.append(Tiemp[11:])
          amp.append(Amplitud)
          print Tiemp[11:]
     else:
          print "None"
ff.close()
outo=open('XY.txt','w')
for t, a in zip(tiem, amp):
    outo.write('{} {}\n'.format(t, a))
outo.close()

答案 1 :(得分:0)

假设你只是想把所有东西都放在" T"和那个" T"不会出现在该行的其他任何地方,为什么不使用split()?这里有一个最简单的数据示例:

l = ['2015-04-15T07:00:52.260000  15842\n',
'2015-04-15T07:00:52.270000  10292\n',
'2015-04-15T07:00:52.280000  10845\n',
'2015-04-15T07:00:52.290000  13727\n']

tiem = []
for line in l:
    tiem.append(line.split('T')[1])

out = open('out.txt', 'w')
for line in tiem:
    out.write(line)

out.close()

out.txt中的输出如下所示:

07:00:52.260000  15842
07:00:52.270000  10292
07:00:52.280000  10845
07:00:52.290000  13727

更好的是,如果你不需要对这些数据做任何事情,

l = ['2015-04-15T07:00:52.260000  15842\n',
'2015-04-15T07:00:52.270000  10292\n',
'2015-04-15T07:00:52.280000  10845\n',
'2015-04-15T07:00:52.290000  13727\n']

out = open('out.txt', 'w')
for line in l:
    data = line.split('T')[1]
    out.write(data)
out.close()

将产生相同的输出。

答案 2 :(得分:0)

这是代码,非常感谢Abernet和Pencil,当然还要感谢Obspy。

将Seisan波形转换为Ascii 2列的脚本 被称为saveASCII_xy.py(byG0d& + 0n1n0_A_P) 非常感谢Abernet和Pencil,因为他们为此做出了贡献。 saveASCII_xy.py

from obspy import read
import os
import csv
import string
import numpy as np

patho=raw_input('Path to Go-->')
os.chdir(patho)
listaa=[f for f in os.listdir(patho)]
print listaa
no_ar=raw_input('Data Name-->')
data_in=read(no_ar)
data_in.write('salida.ascii',format='TSPAIR')
data_inn=open('salida.ascii')
data_out=open('evento_T_A.ascii','w')
for i in range(1): 
    data_inn.next()
    for line in data_inn: 
            data_out.writelines(line)
data_inn.close()
data_out.close()

ff=open('evento_T_A.ascii','r')
tiem=[]
amp=[]
for line in ff:
        line=line.strip()
        columns=line.split()
        Tiempo=columns[0]
        Amplitud=columns[1]
        Tiemp=str(Tiempo)
        if "T" in Tiemp:
                tiem.append(Tiemp[11:])
                amp.append(Amplitud)
#                print Tiemp[11:]
        #else:
        #       print "None"
ff.close()
outo=open('ASCII_XY.txt','w')
for t, a in zip(tiem,amp):
        outo.write('{} {}\n'.format(t, a))
outo.close()

如果不是那么pythonic的方式很抱歉,我正在学习,任何建议和评论都会很好的代码tonino.gafm@gmail.com

非常感谢!!!