删除文本文件中的行

时间:2010-04-12 16:05:50

标签: python text-files

我拥有的以下文本文件的示例是:

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

数据由文本文件中的制表符分隔,第一列表示位置。

我需要遍历文本文件中除列0之外的每个值并找到最低值。

一旦找到最低值,就需要将值与列名和位置一起写入新文本文件。第0列的名称为“position”第1列“十五”,第2列为“16”,第3列为“17”

例如,上述数据中的最低值是“-7.6”,并且在第3列中,其名称为“十七”。因此,需要将“7.6”,“十七”及其位置值(在本例中为1)写入新文本文件。

然后我需要从上面的文本文件中删除一些行。

E.G。上面的最低值是“-7.6”并且在位置“1”处找到并且在第3列中找到,其名称为“十七”。因此,我需要从文本文件中删除17行,包括位置1

所以找到最低值的列表示需要删除的行数以及在删除开始点处找到的位置

2 个答案:

答案 0 :(得分:1)

打开此文件进行读取,打开另一个文件进行写入,并复制与过滤器不匹配的所有行:

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

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

readfile.close()
writefile.close()

答案 1 :(得分:0)

这是我认为你想要的东西(虽然你的要求很难遵循):

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. 每行的开头是否真的有“&gt;”或是复制/粘贴错误?
    • 我认为这不是错误。
  2. 您是否希望将“7.6”或“-7.6”写入新文件?
    • 我以为你想要原始值。
  3. 您是否要跳过文件中的行?或基于第一列的位置?
    • 我以为你想跳过职位。
  4. 您说要删除原始文件中的数据。
    • 我认为跳绳位置已足够。