2015-05-06 7 views
1

Я хочу, чтобы разделить первый элемент с помощью : сплиттера, но отрицать вторую и т.д.расщепленные элементы в питоне и приложить некоторые пункты

У меня есть файл со следующим содержанием:

# cat myfile 
one:two 
three:four 
five:six:seven 
eight:nine:ten 

То, что я пытался с питона:

with open('myfile','r') as f: 
    for line in f: 
     for word in line.split(): 
      item1=word.split(':')[0] 
      item2=word.split(':')[1:] 
      print 'Item1: '+item1+' Item2: '+str(item2) 

в результате:

Item1: one Item2: ['two'] 
Item1: three Item2: ['four'] 
Item1: five Item2: ['six', 'seven'] 
Item1: eight Item2: ['nine', 'ten', 'eleven'] 

Но я хочу follwing результат:

Item1: one Item2: two 
Item1: three Item2: four 
Item1: five Item2: sixseven 
Item1: eight Item2: nineteneleven 
+0

@Martijn Питерс Действительно это не дублируется ... Пожалуйста, посмотрите на мой вопрос – MLSC

+1

правильно, я пропустил, что вы хотите просто удалить ':' там. Для этого есть и другие дубликаты; хочу, чтобы я снова обманул? –

+1

Повторно окутан в каноническое сообщение «Список строк». –

ответ

2

Вы можете разделить один раз и либо str.replace или str.translate удалить :, вы также должны разделить один раз и распаковывать:

In [6]: word,rest = s.split(":",1) 

In [7]: rest = rest.translate(None,":") 

In [8]: word,rest 
Out[8]: ('eight', 'nineten') 

с помощью замены:

In [9]: s = "eight:nine:ten" 
In [10]: word,rest = s.split(":",1)  
In [11]: rest = rest.replace(":","")  
In [12]: rest 
Out[12]: 'nineten' 

Для Python 3 Вам нужно пройти Dict к перевод:

word, rest = s.split(":",1) 
rest = rest.translate({ord(":"): ""}) 

print(word,rest) 

Вам также не нужно перебирать расщепленной линии:

with open("test.txt") as f: 
    for line in f: 
     word, rest = line.rstrip().split(":", 1) 
     print('Item1: {} Item2: {}'.format(word,rest.translate(None,":")) 

Выход:

Item1: one Item2: two 
Item1: three Item2: four 
Item1: five Item2: sixseven 
Item1: eight Item2: nineten 
1

Вы собирались прекрасно там, одна вещь, которую вы пропустили было конкатенации разрезные элементы обратно в строку, которая производится с помощью join, вы можете изменить разделитель к любой другой вещи, как , и т.д.

separator = "" 
for line in f.split("\n"): 
    for word in line.split(): 
     item1=word.split(':')[0] 
     item2=word.split(':')[1:] 
     print 'Item1: '+item1+' Item2: '+separator.join(item2) 

Выход:

Item1: one Item2: two 
Item1: three Item2: four 
Item1: five Item2: sixseven 
Item1: eight Item2: nineten 
+0

Спасибо, я хочу, чтобы вы отредактировали 'item2 ='. потому что я хочу использовать item1 и 2 для других функций – MLSC