0

わかりましたので、入力テキスト ファイルを取得して、Microsoft Word や他のワード プロセッサのように正当化しようとしています。最後の行の文字位置合わせバーを実行するテキストを取得しました。' '最後の行の各スペースを反復処理し、 a を挿入して最後の最後を指定された長さまで取得する方法を見つけようとしています。

私が試してみると:

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

Pythonが教えてくれたシンプルなスタイルの精神で、反復不可能なエラーが発生します。したがって、コード ループ内の 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                                   .
4

2 に答える 2

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

あなたはリテラルに割り当てるのに疲れています。このようにしてみてください

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

そしてそれが機能するかどうかを確認しますか?

于 2012-05-15T14:04:24.120 に答える
1

私はあなたが何をしたいのか理解するのに少し問題があります...あなたはモジュール(http://docs.python.org/library/textwrap.html )が欲しいかもしれないようです。これがあなたの望むものでない場合は、私に知らせてください。喜んでこの回答を削除します...textwrap

編集

これはあなたが望むことをしますか?

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ブロックの長さのサブ文字列に分割し、それらの文字列を次々にリストに格納してから、1日の終わりに "\ n" .join(list_of_strings)します。これは宿題だと思うので、コードは書きません。

于 2012-05-15T14:04:28.093 に答える