2016-01-23 2 views
2

У меня есть два файла со списком организмов. Первый файл содержит список, обозначающий «Семейный род», поэтому два столбца. Второй файл содержит «Родные виды», а также две колонки. Оба файла совпадают с Родом всех перечисленных видов. Я хочу объединить оба списка с помощью Рода каждого файла, чтобы иметь возможность добавлять фамилию в «Родные виды». Таким образом, выход должен содержать «Семейный род». Поскольку между каждым именем есть пробел, я использую это пространство для разделения на столбцы. До сих пор это код у меня есть:Итерация двух файлов, сравнение совпадающих строк в строках, слияние совпадающих строк

with open('FAMILY_GENUS.TXT') as f1, open('GENUS_SPECIES.TXT') as f2: 
    for line1 in f1: 
     line1 = line1.strip() 
     c1 = line1.split(' ') 
     print(line1, end=' ') 
     for line2 in f2: 
      line2 = line2.strip() 
      c2 = line2.split(' ') 
      if line1[1] == line2[0]: 
       print(line2[1], end=' ') 
     print() 

Результирующий вывод состоит только из двух линий, а не весь альбом. Что мне не хватает?

А также, как я могу сохранить его в файле, а не просто печатать на экране?

ответ

3

Это альтернативное решение.

f1 = open('fg','r') 
f2 = open('gs','r') 
genera= {} 
for i in f1.readlines(): 
    family,genus = i.strip().split(" ") 
    genera[genus] = family 

for i in f2.readlines(): 
    genus,species = i.strip().split(" ") 
    print(genera[genus], genus,species) 
0

Сначала я обрабатывал файлы и получал сопоставление рода с семьей и с несколькими видами, которые могут содержать. Затем используйте это сопоставление, чтобы сопоставить их и распечатать.

genuses = {} 

# Map all genuses to a family 
with open('FAMILY_GENUS.TXT') as f1: 
    for line in f1: 
     family, genus = line.strip().split() 
     genuses.setdefault(genus, {})['family'] = family 

# Map all species to a genus 
with open('GENUS_SPECIES.TXT') as f2: 
    for line in f2: 
     genus, species = line.strip().split() 
     genuses.setdefault(genus, {}).setdefault('species', []).append(species) 

# Go through each genus and create a specie string for 
# each specie it contains. 
species_strings = [] 
for genus, d in genuses.items(): 
    family = d.get('family') 
    species = d.get('species') 
    if family and species: 
     for specie in species: 
      s = '{0} {1} {2}'.format(family, genus, specie) 
      species_strings.append(s) 

# Sort the strings to make the output pretty and print them out. 
species_strings.sort() 
for s in species_strings: 
    print s 
Смежные вопросы