gpt4 book ai didi

python - 在不同的文件中分组写入行

转载 作者:太空宇宙 更新时间:2023-11-03 19:26:40 25 4
gpt4 key购买 nike

我有一个小脚本,但对我来说效果不佳,希望您能帮助并找到问题。

我有两个启动文件:Traveltimes:包含我需要的行,它是一个列文件(每行只有一个数字)。我需要的行由以 11 个空格开头的行分隔

标题行:包含三个标题行

output_file:我想要获取 29 个文件 (STA%s)。里面是什么?每个文件都将包含相同的标题行,之后我想附加行程时间文件中包含的行组(每个文件都有一组不同的行)。每组线由 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))

最佳答案

建议:

  • 首先阅读标题行。在继续之前请确保此操作有效。其余代码都不需要在此处缩进。
  • 考虑编写一个单独的函数,将行程时间文件分组到一个列表列表中。
  • 一旦您有了可用的行程时间读取器和分组器,只需创建一个新的 STA 文件,将标题打印到其中,然后将时间组写入其中。

逐步构建您的程序,确保它在每一步都达到您的预期。不要尝试一次完成所有操作,因为那样您将无法轻松找到问题所在。

我对脚本的快速编辑使用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))

此代码未经测试,因为我没有示例数据。希望您能掌握其要点。

关于python - 在不同的文件中分组写入行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7884798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com