我拥有的以下文本文件的示例是:
> 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
所以找到最低值的列表示需要删除的行数以及在删除开始点处找到的位置
答案 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)
我不清楚的事情: