我有一个小脚本对我来说效果不好,希望你能帮忙找到问题。
我有两个起始文件: traveltimes:包含我需要的行,它是一个列文件(每行只有一个数字)。我需要的行由一行开头,该行以11个空格开头
标题行:包含三个标题行
output_file:我想获得29个文件(STA%s)。里面有什么?每个文件都将包含相同的标题行,之后我想附加traveltimes文件中包含的一组行(每个文件的一组不同的行)。每组线由74307行(1列)
组成到目前为止,这个脚本创建了29个具有相同标题行的文件,但随后它混合了所有内容,我的意思是它写了一些内容,但它并不是我想要的。
任何想法????
def make_station_files(traveltimes, header_lines):
"""Gives the STAxx.tgrid files required by loc3d"""
sta_counter = 1
with open (header_lines, 'r') as file_in:
data = file_in.readlines()
for i in range (29):
with open ('STA%s' % (sta_counter), 'w') as output_files:
sta_counter += 1
for i in data [0:3]:
values = i.strip()
output_files.write ("%s\n\t1\n" % (values))
with open (traveltimes, 'r') as times_file:
#collector = []
for line in times_file:
if line.startswith (" "):
break
output_files.write ("%s" % (line))
答案 0 :(得分:1)
建议:
逐步构建您的程序,确保它在每一步都能达到预期效果。不要试图一次性完成所有这一切,因为那样你就不能轻易找到问题所在。
我对您的脚本的快速编辑使用 itertools.groupby()作为石斑鱼。它有点高级,因为分组功能是有状态的,并在可变列表中跟踪它的状态:
def make_station_files(traveltimes, header_lines):
'Gives the STAxx.tgrid files required by loc3d'
with open (header_lines, 'r') as f:
headers = f.readlines()
def station_counter(line, cnt=[1]):
'Stateful station counter -- Keeps the count in a mutable list'
if line.strip() == '':
cnt[0] += 1
return cnt[0]
with open(traveltimes, 'r') as times_file:
for station, group in groupby(times_file, station_counter):
with open('STA%s' % (station), 'w') as output_file:
for header in headers[:3]:
output_file.write ('%s\n\t1\n' % (header.strip()))
for line in group:
if not line.startswith(' '):
output_file.write ('%s' % (line))
此代码未经测试,因为我没有样本数据。希望你能得到它的要点。