感谢您花时间阅读它。 我有这样的数据(我只会显示几行,因为它是almos 3000行)
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
非常感谢你花时间阅读它 -
Tonino
答案 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
非常感谢!!!