你会如何格式化像这样长的一行呢?我想把它的宽度不超过80个字符:

logger.info("Skipping {0} because its thumbnail was already in our system as {1}.".format(line[indexes['url']], video.title))

这是我最好的选择吗?

url = "Skipping {0} because its thumbnail was already in our system as {1}."
logger.info(url.format(line[indexes['url']], video.title))

当前回答

您可以使用textwrap模块将其分为多行

import textwrap
str="ABCDEFGHIJKLIMNO"
print("\n".join(textwrap.wrap(str,8)))

ABCDEFGH IJKLIMNO

从文档中可以看到:

textwrap。换行(text[, width[,…]]) 换行文本(字符串)中的单个段落,使每行最多为宽度字符长。返回一个输出行列表,没有最后的换行符。 可选关键字参数对应于TextWrapper的实例属性,如下所示。宽度默认为70。 有关wrap()行为的其他详细信息,请参阅TextWrapper.wrap()方法。

其他回答

您可以使用textwrap模块将其分为多行

import textwrap
str="ABCDEFGHIJKLIMNO"
print("\n".join(textwrap.wrap(str,8)))

ABCDEFGH IJKLIMNO

从文档中可以看到:

textwrap。换行(text[, width[,…]]) 换行文本(字符串)中的单个段落,使每行最多为宽度字符长。返回一个输出行列表,没有最后的换行符。 可选关键字参数对应于TextWrapper的实例属性,如下所示。宽度默认为70。 有关wrap()行为的其他详细信息,请参阅TextWrapper.wrap()方法。

对于任何试图在长字符串上调用.format(),并且无法在不破坏后续.format(调用的情况下使用一些最流行的字符串换行技术的人,您可以使用str.format("", 1,2)而不是""。format(1,2).这让你可以用任何你喜欢的技术打破字符串。例如:

logger.info("Skipping {0} because its thumbnail was already in our system as {1}.".format(line[indexes['url']], video.title))

可以

logger.info(str.format(("Skipping {0} because its thumbnail was already"
+ "in our system as {1}"), line[indexes['url']], video.title))

否则,唯一的可能就是使用行结束的延续,我个人并不喜欢这样做。

无需加载额外包的解决方案:

def split_by_len(txt: str, l: int, sep: str or None='\n') -> str or list:
    """
    txt: str text
    l: split length (symbols per split)
    sep: separate string or None for list of strs
    """
    spl_list = [txt[i * l : i * l + l] for i in range(len(txt) // l + 1)]
    return spl_list if sep==None else sep.join(spl_list)

示例1:

print(split_by_len(txt='XXXXX', l=2, sep='\n'))

XX
XX
X

示例2:

print(split_by_len(txt='XXXXX', l=2, sep=' '))

XX XX X

示例3:

print(split_by_len(txt='XXXXX', l=2, sep=None))

['XX', 'XX', 'X']

就我个人而言,我不喜欢挂开块,所以我把它格式化为:

logger.info(
    'Skipping {0} because its thumbnail was already in our system as {1}.'
    .format(line[indexes['url']], video.title)
)

一般来说,我不会费心费力地让代码完全符合80列的行。将线长保持在合理的水平是值得的,但80的硬限制已经成为过去。

连续的字符串字面值由编译器连接,带括号的表达式被认为是一行代码:

logger.info("Skipping {0} because it's thumbnail was "
  "already in our system as {1}.".format(line[indexes['url']],
  video.title))