2016-09-26 2 views
-1

123|china|jack|342|usa|Nick|324345|spin|Amyпитона разбить длинную строку на несколько строк

Я хочу, чтобы конечный результат, как это (я знаю, что нужна новая линия для каждого 3 элемента):

123,china,jack 
342,usa,Nick 
324345,spin,Amy 

благодарят вас

+0

меня пытается с помощью SQL, чтобы разобрать эту вещь, но файл слишком велик, и я действительно не специалист по питона – love233126

+0

'String.Split («|»)' будет делать, если 'строка =«123 | china | jack | 342 | usa | Nick | 324345 | spin | Amy''. попробуйте распечатать новую строку после 3-х элементов. Она решит вашу проблему. –

ответ

2

Попробуйте это:

x = '123|china|jack|342|usa|Nick|324345|spin|Amy' 

l = x.split('|') 
new_l = [l[i:i+3] for i in range(0,len(l),3)] 

Это даст вам:

>>> for i in new_l: 
...  print ','.join(i) 
... 
123,china,jack 
342,usa,Nick 
324345,spin,Amy 

Update: прочитать файл

Для чтения файла в качестве строки выполните следующие действия:

with open('your_file.txt', 'r') as myfile: 
    x=myfile.read().replace('\n', '|') 
+0

благодарим вас за помощь – love233126

+0

рад, что помог !!! – coder

+0

жаль беспокоить вас снова кодер, вместо жесткого кода x = '123 | china | jack | 342 | usa | Nick | 324345 | spin | Amy', я пробовал использовать x = open ("love.txt"), у меня есть также измените cwd, но ничего не работает? python не готов к файлу :( – love233126

1

Это может быть сделано с одной print заявление

>>> d = '123|china|jack|342|usa|Nick|324345|spin|Amy' 
>>> l = d.split('|') 
>>> print(*list(map(lambda v: ','.join(v),[l[x: x+3] for x in range(0, len(l), 3)])), sep='\n') 
123,china,jack 
342,usa,Nick 
324345,spin,Amy 

Итак, шаг за шагом

>>> d = '123|china|jack|342|usa|Nick|324345|spin|Amy' 
>>> l = d.split('|') # splitting input string into list of str objects that separated with '|' 
>>> l 
['123', 'china', 'jack', '342', 'usa', 'Nick', '324345', 'spin', 'Amy'] 
>>> [l[x: x+3] for x in range(0, len(l), 3)] # combining elements by 3 
[['123', 'china', 'jack'], ['342', 'usa', 'Nick'], ['324345', 'spin', 'Amy']] 
>>> list(map(lambda v: ','.join(v),[l[x: x+3] for x in range(0, len(l), 3)])) # merging every sublist to str with ',' as separator 
['123,china,jack', '342,usa,Nick', '324345,spin,Amy'] 
>>> print(*list(map(lambda v: ','.join(v),[l[x: x+3] for x in range(0, len(l), 3)])), sep='\n') # final print 
123,china,jack 
342,usa,Nick 
324345,spin,Amy 
+0

благодарю вас за помощь – love233126

Смежные вопросы