如何迭代一系列空格?

时间:2012-05-15 13:56:21

标签: python text loops justify

好的,所以我正在尝试输入一个输入文本文件并证明它像微软词或任何其他文字处理器一样。我已经得到了文字来做最后一行的字符对齐。我试图找出如何遍历最后一行中的每个空格并插入' '以获得最后一个到达指定长度的空格。

如果我尝试:

for ' ' in new:
    insert(new,' ',find(' '))

蟒蛇教我的简约风格精神, 我得到一个不可迭代的错误。因此在代码循环中的while。但这只会在第一个空格处插入所有空格。

还有办法让这个程序通过单词而不是字符来证明吗?

我使用'Lorem ipsum ...'段落作为我的默认文字。

感谢任何帮助。

完整代码:

inf = open('filein.txt', 'r')
of = open('fileout.txt', 'w')

inf.tell()

n = input('enter the number of characters per line: ')

def insert(original, new, pos):
  #Inserts new inside original at pos.
  return original[:pos] + new + original[pos:] 

try:
    print 'you entered {}\n'.format(int(n))
except:
    print 'there was an error'
    n = input('enter the number of characters per line: ')
else:
    new = inf.readline(n)
    def printn(l):

        print>>of, l+'\n'
        print 'printing to file',
        print '(first char: {} || last char: {})'.format(l[0],l[-1])

    while new != '': #multiple spaces present at EOF
        if new[0] != ' ': #check space at beginning of line
            if new[-1] != ' ': # check space at end of line
                while (len(new) < n):
                    new = insert(new,' ',(new.find(' ')))
                printn(new)

        elif new[0] == ' ':
            new = new.lstrip() #remove leading whitespace
            new = insert(new,' ',(new.find(' ')))
            while (len(new) < n):
                new = insert(new,' ',(new.find(' ')))
            printn(new)

        elif new[-1] == ' ':
            new = new.rstrip() #remove trailing whitespace
            new = insert(new, ' ',(new.rfind(' ')))
            while (len(new) < n):
                new = insert(new,' ',(new.rfind(' ')))
            printn(new)       

        new = inf.readline(n)


    print '\nclosing files...'
    inf.close()
    print 'input closed'
    of.close()
    print 'output closed'

输入:

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.

如果行长n == 37

输出:

Lorem ipsum dolor sit amet, consectet
ur adipisicing elit, sed do eiusmod t
magna aliqua. Ut enim ad minim veniam
, quis nostrud exercitation ullamco l
consequat. Duis aute irure dolor in r
cillum dolore eu fugiat nulla pariatu
non proident, sunt in culpa qui offic
ia deserunt mollit anim id est laboru
m                                   .

2 个答案:

答案 0 :(得分:1)

for ' ' in new:
    insert(new,' ',find(' '))

您正在尝试分配文字。试试这个

for x in new:
    if x == ' ':
        insert(new, x, find(' '))

看看它是否有效?

答案 1 :(得分:1)

我在理解你想做什么时遇到了一些麻烦......看起来你可能想要textwrap模块(http://docs.python.org/library/textwrap.html)。如果这不是你想要的,请告诉我,我很乐意删除这个答案......

修改

这样做你想要的吗?

s="""Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor
incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute 
irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla 
pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia
deserunt mollit anim id est laborum."""

import textwrap

print textwrap.fill(s,37)

<强> EDIT2

在这种情况下,我会将你的字符串分解为每个N块长的子串,将这些字符串一个接一个地存储在列表中,然后在一天结束时我将“\ n”.join(list_of_strings)。我不会编码,因为我怀疑这是作业。