Python 在不同的文件中按组写入行
我有一个小脚本,它不是很好地为我工作,希望你能帮助和发现问题 我有两个起始文件: traveltimes:包含我需要的行,它是一个列文件(每行只有一个数字)。我需要的行由一行分隔,该行以11个空格开头 标题行:包含三个标题行 输出文件:我想获取29个文件(STA%s)。里面是什么?每个文件都将包含相同的标题行,在此之后我希望附加traveltimes文件中包含的一组行(每个文件一组不同的行)。每组行由74307行(1列)组成 到目前为止,这个脚本创建了29个具有相同标题行的文件,但它混淆了所有内容,我的意思是它写了一些东西,但这不是我想要的 有什么想法吗Python 在不同的文件中按组写入行,python,file,Python,File,我有一个小脚本,它不是很好地为我工作,希望你能帮助和发现问题 我有两个起始文件: traveltimes:包含我需要的行,它是一个列文件(每行只有一个数字)。我需要的行由一行分隔,该行以11个空格开头 标题行:包含三个标题行 输出文件:我想获取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))
建议:
- 首先读取标题行。在继续操作之前,请确保此操作有效。代码的其余部分都不需要在下面缩进
- 考虑编写一个单独的函数,将traveltimes文件分组到列表列表中
- 一旦您有了一个工作的traveltimes阅读器和grouper,只有创建一个新的STA文件,将标题打印到其中,然后将时间组写入其中
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))
此代码未经测试,因为我没有示例数据。希望您能了解要点。建议:
- 首先读取标题行。在继续操作之前,请确保此操作有效。代码的其余部分都不需要在下面缩进
- 考虑编写一个单独的函数,将traveltimes文件分组到列表列表中
- 一旦您有了一个工作的traveltimes阅读器和grouper,只有创建一个新的STA文件,将标题打印到其中,然后将时间组写入其中
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))
此代码未经测试,因为我没有示例数据。希望您能理解它的要点。我确信错误在最后四行,因为头已经正确地写入了所有29个文件中;不管怎样,我会尽量按照你的建议去做……你的建议对我来说很好,但第二点还不太清楚,我的意思是,你怎么能把空白作为迭代的关键呢?你能举个小例子吗?干杯我刚刚否决了那个建议。If需要一个有状态的分组函数,这可能是一个不必要的复杂问题(因为你已经接近了)。是的,但它仍然是我的主要问题。我最大的问题是如何对它们进行分组,以便在以后将它们写入一个文件groupby中的STAU计数器是什么?我很确定错误出现在最后四行,因为头已正确写入所有29个文件中;不管怎样,我会尽量按照你的建议去做……你的建议对我来说很好,但第二点还不太清楚,我的意思是,你怎么能把空白作为迭代的关键呢?你能举个小例子吗?干杯我刚刚否决了那个建议。If需要一个有状态的分组函数,这可能是一个不必要的复杂问题(因为你已经接近了)。是的,但它仍然是我的主要问题。我最大的问题是如何对它们进行分组,以便在以后将它们写入文件中groupby中的STAU计数器是什么?