2017-02-10 111 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