2017-02-10 7 views
0

Я пытаюсь создать программу, чтобы создать трехмерную монограмму из любого имени, введенного в функцию через текстовый файл. Вот код!Разбиение строки после символов x

output = 0 
output_str = [] 
out = [] 

with open('Prob01.in.txt') as f: 
    lines = f.read() 
    for i in lines: 
     if not i.isdigit(): 
      output_str.append(i) 
    result = ''.join(output_str) 
    result = result.split() 
    for names in result: 
     result = names[0].title() 
     out.append(result) 
    print ''.join(out) 

Вот текст!

2 
2 
Franklin Delano Roosevelt 
gabriel de paula 
3 
samuel a jackson 
robert j cuttle 
fernanda d holland 

В результате я ищу это:

FDR 
GDP 
SAJ 

Однако, я получаю:

FDRGDPSAJRJCFDH 

Я полагал, что я должен были бы .split() после й количества символов , в этом случае 3, но как бы я мог это достичь?

Имейте в виду, что я довольно новичок в Python, поэтому извиняюсь, если есть лучший способ сделать это. Я бы хотел узнать, есть ли.

Спасибо!

Дополнительно:

мне нужно вывести результат в файл, я попробовал:

output.write(''.join(monogram)) 

С выходом на [], и результаты были напечатаны в одной строке.

FDRGDPSAJRJCFDH 
+1

' '' .join (уходит)' -> ' '\ n'.join (уходит)'? – asongtoruin

ответ

0

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

import re 

with open('Prob01.in.txt', 'r') as f, open('output.txt', 'w+') as output: 
    monograms = [] 

    lines = f.readlines() 
    pattern = re.compile("^\D+\n") # Any non-digit simbols in line 
    name_list = filter(lambda line: re.match(pattern, line), lines) 
    for name in name_list: 
     monograms.append(''.join(map(lambda x: x[0].title(), name.split()))) 

    output.write('\n'.join(monograms)) 

или

with open('Prob01.in.txt', 'r') as f, open('output.txt', 'w+') as output: 
    monograms = [] 

    for line in f.readlines(): 
     line = line.strip() 
     if line and not line.isdigit(): 
      monogram = [] 
      for word in line.split(): 
       monogram.append(word[0].upper()) 
      monograms.append(''.join(monogram)) 

    output.write('\n'.join(monograms)) 
+0

Спасибо всем! Я борюсь с этой проблемой в течение нескольких дней. Я хотел попробовать это самостоятельно, но после многих неудачных попыток я подумал, что лучше спросить и учиться на нем.Еще раз, спасибо :) –

+0

У меня на самом деле возникла проблема! Я забыл упомянуть, что мне нужно записать в файл, когда я сделал 'output.write (''. Join (monogram))' результат был 'FDRGDPSAJRJCFDH' –

+0

Символ '\ n' написан в конце, когда вы вызовите функцию 'print'. Если вы собираетесь использовать 'output.write', просто добавьте '\ n' после каждой монограммы. Или лучше сделать список монограмм и вызвать 'output.write ('\ n'.join (монограммы))' –

0

Вам нужно разбить строку на 3 секции Char перед отправкой их объединения, а также изменить присоединиться к \ п, так что вы вставить новую строку между именем каждого человека:

output = 0 
output_str = [] 
out = [] 

with open('Prob01.in.txt') as f: 
    lines = f.read() 
    for i in lines: 
     if not i.isdigit(): 
      output_str.append(i) 
    result = ''.join(output_str) 
    result = result.split() 
    for names in result: 
     result = names[0].title() 
     out.append(result) 
    print '\n'.join(map(''.join, zip(*[iter(out)]*3))) 

Выходной :

FDR 
GDP 
SAJ 
RJC 
FDH 

Хотя лучший способ может быть использование регулярных выражений:

import re 
with open('Prob01.in.txt') as f: 
    for m in re.findall(r"([a-zA-Z])\S* ([a-zA-Z])\S* ([a-zA-Z])\S*", f.read().upper()): 
     print ''.join(m) 

Выход:

FDR 
GDP 
SAJ 
RJC 
FDH 
0

Вы можете иметь свой желаемый результат в list comprehension как на примере ниже:

Я предполагая, что ваш вход fil называется input_file:

data = (k.rstrip().split() for k in open("input_file", 'r')) 
subfinal = ("".join(j[0].upper() for j in k if not j.isdigit()) for k in data) 
final = [k for k in subfinal if k != ''] 
for k in final: 
    print(k) 

Выход:

FDR 
GDP 
SAJ 
RJC 
FDH 

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

  • Нет связанных вопросов^_^