Удаление строк в текстовом файле - PullRequest
2 голосов
/ 12 апреля 2010

Образец следующего текстового файла, который у меня есть:

> 1 -4.6    -4.6    -7.6
> 
> 2 -1.7    -3.8    -3.1
> 
> 3 -1.6    -1.6    -3.1

данные разделяются вкладками в текстовом файле, а в первом столбце указывается позиция.

Мне нужно перебрать все значения в текстовом файле, кроме столбца 0, и найти самое низкое значение.

как только будет найдено самое низкое значение, это значение необходимо записать в новый текстовый файл вместе с именем и позицией столбца. Столбец 0 имеет название «позиция», столбец 1 «пятнадцать», столбец 2 «шестнадцать» и столбец 3 «семнадцать»

например, самое низкое значение в приведенных выше данных - «-7,6» и находится в столбце 3 с названием «семнадцать». Поэтому «7.6», «семнадцать» и их значение позиции, которое в данном случае равно 1, необходимо записать в новый текстовый файл.

Затем мне нужно удалить ряд строк из вышеуказанного текстового файла.

например. самое низкое значение выше "-7.6" и находится в позиции "1" и находится в столбце 3, который называется "семнадцать". Поэтому мне нужно удалить семнадцать строк из текстового файла, начиная с позиции 1

поэтому столбец, в котором найдено самое низкое значение, обозначает количество строк, которые необходимо удалить, и положение, в котором он находится, указывает начальную точку удаления

Ответы [ 2 ]

1 голос
/ 12 апреля 2010

Откройте этот файл для чтения, другой файл для записи и скопируйте все строки, которые не соответствуют фильтру:

readfile = open('somefile', 'r')
writefile = open('otherfile', 'w')

for line in readfile:
  if not somepredicate(line):
    writefile.write(line)

readfile.close()
writefile.close()
0 голосов
/ 12 апреля 2010

Вот пример того, что, я думаю, вы хотели (хотя ваши требования были довольно сложными для исполнения):

def extract_bio_data(input_path, output_path):
    #open the output file and write it's headers
    output_file = open(output_path, 'w')
    output_file.write('\t'.join(('position', 'min_value', 'rows_skipped')) + '\n')

    #map column indexes (after popping the row number) to the number of rows to skip
    col_index = { 0: 15, 
                  1: 16, 
                  2: 17 }

    skip_to_position = 0
    for line in open(input_path, 'r'):
        #remove the '> ' from the beginning of the line and strip newline characters off the end
        line = line[2:].strip()

        #if the line contains no data, skip it
        if line == '':
            continue

        #split the columns on whitespace (change this to split('\t') for splitting only on tabs)
        columns = line.split()

        #extract the row number/position of this data
        position = int(columns.pop(0))

        #this is where we skip rows/positions
        if position < skip_to_position:  
            continue

        #if two columns share the minimum value, this will be the first encountered in the list
        min_index = columns.index(min(columns, key=float))

        #this is an integer version of the 'column name' which corresponds to the number of rows that need to be skipped
        rows_to_skip = col_index[min_index]

        #write data to your new file (row number, minimum value, number of rows skipped)
        output_file.write('\t'.join(str(x) for x in (position, columns[min_index], rows_to_skip)) + '\n')

        #set the number of data rows to skip from this position
        skip_to_position = position + rows_to_skip


if __name__ == '__main__':
    in_path = r'c:\temp\test_input.txt'
    out_path = r'c:\temp\test_output.txt'
    extract_bio_data(in_path, out_path)

Вещи, которые мне не были понятны:

  1. Есть ли действительно ">" в начале каждой строки или это ошибка копирования / вставки?
    • Я предположил, что это не ошибка.
  2. Вы хотели, чтобы "7.6" или "-7.6" были записаны в новый файл?
    • Я предположил, что вы хотели исходное значение.
  3. Вы хотели пропустить строки в файле? или позиции на основе первого столбца?
    • Я предполагал, что вы хотите пропустить позиции.
  4. Вы говорите, что хотите удалить данные из исходного файла.
    • Я предполагал, что пропусков было достаточно.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...