2016-12-23 2 views
1

Я хочу реформировать этуКак поместить строки друг под друга и присвоить номер?

A,B     
AFD,DNGS,SGDH   
NHYG,QHD,lkd,uyete  
AFD,TTT 

и присвоить номер для каждой строки к нему, который стал таким

A 1 
B 1 
AFD 2 
DNGS 2 
SGDH 2 
NHYG 3 
QHD 3 
lkd 3 
uyete 3 
AFD 4 
TTT 4 

Как я могу добиться этого?

Я застрял в следующем коде:

import itertools 
# open the data from the directory 
with open ('./test.txt') as f: 
    # Make a file named result to write your results there 
    with open ('result.txt' , 'w') as w: 
     # read each line with enumerate (a number for each string) 
     for n , line in enumerate (f.readlines ()): 

ответ

3

Вы можете использовать следующие:

with open('test.txt') as f_in, open('result.txt', 'w') as f_out: 
    f_out.write('\n'.join('{} {}'.format(s, i) 
          for i, l in enumerate(f_in, 1) 
          for s in l.strip().split(','))) 

В выше enumerate возвратит (index, line) кортежи из входного файла и индексы начинаются с 1, который был передан как параметр. Затем для каждой строки strip используется для удаления конечной новой строки, а затем строка split с каждого ,. Наконец, выражение генератора выводит строки с форматом 'word index', которые соединяются вместе с символом новой строки перед записью в выходной файл.

Update Если вы хотите, чтобы распечатать результат вместо того, чтобы писать файл, который вы можете сделать это с помощью следующего кода:

with open('test.txt') as f_in: 
    print '\n'.join('{} {}'.format(s, i) 
        for i, l in enumerate(f_in, 1) 
        for s in l.strip().split(',')) 

Выходные:

A 1 
B 1 
AFD 2 
DNGS 2 
SGDH 2 
NHYG 3 
QHD 3 
lkd 3 
uyete 3 
AFD 4 
TTT 4 
+0

Я как раз собирался опубликовать свой ответ, тогда я увидел это, очень аккуратно! – RichSmith

+0

@niemmi У меня нет ошибки, но также я не получаю выход? было бы возможно показать, как печатать результат, также потому, что ваш код очень сложный, и я не могу его понять :-) – nik

+0

@nik Выход был записан в файл с тем же именем, что и в вашем вопросе. См. Обновленный ответ о том, как его распечатать, а также краткое объяснение того, что происходит. – niemmi

2

Включите это в верхней части файла, так что вы можете использовать функцию print (print утверждение является устаревшим в Python 3).

from __future__ import print_function 

Тогда вы должны разделить линию, основанную на ,:

 for word in line.split(','): 
      print(word, n+1, file=w) 
+0

Ошибка синтаксиса 'file = w)' – nik

+0

Мне понравился ваш ответ, спасибо, но 'line'is дает ошибку, я не знаю, что не так с моим Mac или с моим программированием :-(он заставляет меня crazy – nik

+0

@nik вы включили строку 'from __future__' в верхней части своей программы? Вы также можете использовать 'print >> w, word, n + 1', но вы действительно должны начать использовать функцию print ** ** во всех своих программах, а в 2.7 можете сделать это с этим импортом. Это не имеет никакого отношения к тому, чтобы быть на Mac. – Anthon

1

Вот небольшой пример, который демонстрирует как иметь дело с разделением строки в Python (помните, что это написано на Python 3, поэтому вам нужно адаптировать его для Python 2.7):

arr = ("A,B","AFD,DNGS,SGDH","NHYG,QHD,lkd,uyete","AFD,TTT") 
for i in range(0,len(arr)): 
    splitarr = arr[i].split(",") 
    for splitItem in splitarr: 
     print(splitItem + " " + str(i+1)) 
+1

You может использовать 'enumerate' вместо итерации по диапазону и получения значения из массива по индексу. Подобно этому' for index, value in enumerate (arr) '. – quapka

+1

@quapka благодарит за полезный отзыв! :) –