2

この行の行番号と単語番号で指定された特定の場所にある複数行テキストの単語を置き換える必要があります。すべての単語が列に並んでいます。

座標で単語を見つけるアルゴリズムを使用しています。

指定された行番号で行をフェッチし、それを別々のサブストリングに分割し、指定された場所の単語を別の単語に置き換えています。次に、結合 (" ".join() ) を実行し、変更された行をファイルに書き戻します。私の問題は、変更された行で単語の配置が失われていることです。正当化と参加を同時に行うにはどうすればよいですか? (変更された単語だけでなく、行内の他の単語も整列を失います)

変更する単語の場所で行を分割するという少し異なるアプローチを使用すれば、それができると思いますが、単語の境界で行を分割した後に配置が失われることに気付きませんでした。

4

3 に答える 3

7

参加する前に、リスト内包内でフォーマット(format()またはを使用)を適用できます。str.format()

''.join([format(el, '<10') for el in list_of_strings])

デモ:

>>> list_of_strings = ['foo', 'barbaz', 'spam-ham']
>>> ''.join([format(el, '<10') for el in list_of_strings])
'foo       barbaz    spam-ham  '

<左揃え、右揃え、および指定された幅(上記の例では10)でテキストを中央>揃えにします。^フォーマットの仕組みの詳細については、フォーマット仕様のドキュメントを参照してください。

4つのスペースに右調整するデモ:

>>> list_of_strings = ['foo', 'ba', 'a']
>>> ''.join([format(el, '>4') for el in list_of_strings])
' foo  ba   a'
于 2013-03-17T22:19:47.050 に答える
0
str = "this is a sample statement";

print str.rjust(50, ' '); # right justification

これにより、次の結果が生成されます。
                                                   これはサンプル ステートメントです 。

50 個の空白とその後のステートメント

あなたが試すことができます

print str.rjust(0, ' ')

文章を強制的に右寄せにする。

于 2013-03-17T22:25:37.147 に答える
0

re.split代わりに分割してみてください。/(?<= )\w/as Regexを使用すると、空白を保持しながら、各単語の前に分割されます。''.join(...)単語を置き換えた後、それらを結合できます。古い単語の長さを尋ねるだけで、新しい単語に必要なだけスペースを追加できます。

新しい単語が列の幅よりも長い場合、これはバグになることに注意してください。

これをコードで書くと:

col = 1                              # replacing second word
line = "hello  there    friend    "  # we've already fetched the line
new_word = "here"                    # the new word
word_list = re.split('(?<= )\w', line)
length = len(word_list[col])
word_list[col] = col + ((length - len(new_word)) * ' ')
new_line = ''.join(word_list)
于 2013-03-17T22:23:56.880 に答える