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

您可以尝试拆分 with re.split。如果您使用/(?<= )\w/正则表达式,它将在每个单词之前拆分,同时保留空格。''.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 回答
0
str = "this is a sample statement";

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

这将产生以下结果:
                                                   这是一个示例语句

50 个空格,后跟您的陈述

你可以试试

print str.rjust(0, ' ')

强制句子是正确的。

于 2013-03-17T22:25:37.147 回答