написание строк по группам в разных файлах - PullRequest
1 голос
/ 25 октября 2011

У меня есть небольшой скрипт, который мне не подходит, надеюсь, вы поможете и найдете проблему.

У меня есть два начальных файла: 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))

1 Ответ

1 голос
/ 25 октября 2011

Предложение:

  • Сначала прочитайте строки заголовка.Убедитесь, что это работает, прежде чем продолжить.Ни один из остальной части кода не должен иметь отступ под этим.
  • Попробуйте написать отдельную функцию, чтобы сгруппировать файл времен прохождения в список списков.grouper, только затем создайте новый файл 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)) 

Этот код не проверен, потому что у меня нет примеров данных.Надеюсь, вы получите суть этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...