2015-01-14 3 views
-5

У меня есть файл (input.txt) с линиями, такими как:Как удалить повторяющиеся записи в файлах

1_306500682 2_315577060 3_315161284 22_315577259 22_315576763 

2_315578866 2_315579020 3_315163106 1_306500983 

2_315579517 3_315162181 1_306502338 2_315578919 

1_306500655 2_315579567 3_315161256 3_315161708 

Из этого, я только хочу, чтобы первые записи в каждой строке, имеющей повторяющиеся значения перед _. В приведенном выше примере, output.txt должен содержать:

1_306500682 2_315577060 3_315161284 22_315577259 

2_315578866 3_315163106 1_306500983 

2_315579517 3_315162181 1_306502338 

1_306500655 2_315579567 3_315161256 

плз помощь ..

+1

StackOverflow это сайт, где вы размещаете вопросы о проблеме вы имеете, а не список требований, ожидающих других сделать вашу работу. Так вы пытались решить это самостоятельно и столкнулись с проблемой? Какую ошибку вы получили? Можете ли вы показать код? – aberna

+2

Да, это то, что вы хотите сделать, и вот как это должно выглядеть – inspectorG4dget

ответ

2

Perl из командной строки,

perl -lane 'my %s;print join " ", grep /^(\d+)_/ && !$s{$1}++, @F' file 

выход

1_306500682 2_315577060 3_315161284 22_315577259 

2_315578866 3_315163106 1_306500983 

2_315579517 3_315162181 1_306502338 

1_306500655 2_315579567 3_315161256 
0
with open('path/to/input') as infile, open('path/to/output', 'w') as outfile: 
    for line in infile: 
     seen = set() 
     nums = line.split() 
     for num in nums: 
      header = num.split("_")[0] 
      if header not in seen: 
       outfile.write(num) 
       outfile.write(" ") 
      seen.add(header) 
     outfile.write('\n') 
0

Вы можете использовать отдельный set, чтобы отслеживать префиксы слова, встречающиеся до сих пор, и собирать неповторяющиеся из каждой строки в list. После обработки каждой строки таким образом можно легко построить строку с заменой текста, содержащую только не повторяющиеся записи, которые были найдены. Примечание. Это всего лишь несколько более эффективная версия текущего запроса inspectorG4dget.

with open('input.txt', 'rt') as infile, \ 
    open('non_repetitive_input.txt', 'wt') as outfile: 
    for line in infile: 
     values, prefixes = [], set() 
     for word, prefix in ((entry, entry.partition('_')[0]) 
           for entry in line.split()): 
      if prefix not in prefixes: 
       values.append(word) 
       prefixes.add(prefix) 
     outfile.write(' '.join(values) + '\n') 

содержимое выходного файла:

1_306500682 2_315577060 3_315161284 22_315577259 
2_315578866 3_315163106 1_306500983 
2_315579517 3_315162181 1_306502338 
1_306500655 2_315579567 3_315161256 
Смежные вопросы