2017-02-10 106 views
0

我正在試圖創建一個程序,使創建一個3字母字母出任何名稱通過文本文件輸入到該函數。這是代碼!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 

我想我會需要()後面的字符的X達.split ,在這種情況下是3,但我會如何實現這一目標?

請記住,我對Python很新,所以我很抱歉,如果有更好的方法來做到這一點。我很樂意學習,如果有的話。

謝謝!

附加:

我還需要將結果輸出到文件中,我試圖:

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

隨着輸出設置爲[],並且在一個行中的結果的所有打印。

FDRGDPSAJRJCFDH 
+1

' ''。加入(下)' - >''\ 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'。 or better make monograms list and call'output.write('\ n'.join(monograms))' –

0

你需要將它們發送到連接前分割字符串爲3個字符段,並改變連接到\ n所以你插入的每一個人的名字之間的換行符:

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