-3

我希望能够计算字符串长度,包括单词之间的 blancs,如果它超过 100 个字符,我必须剪掉它。下面是一个字符串的例子:

'The string99 blah, 2-blahh,........blahhhhhh'

我不想删减单词,所以如果单词中间有 100 个字符,我需要在前一个单词的末尾返回。必须删除最后一个空白和逗号。原始字符串必须保存为文本文件,文件名必须是剪切字符串。

有什么帮助吗?

4

2 回答 2

4

您可以使用该textwrap模块:

演示:

>>> import textwrap
>>> strs = "foo bar spam eggs "*10
>>> for x in textwrap.wrap(strs, 15):
    print x
...     
foo bar spam
eggs foo bar
spam eggs foo
bar spam eggs
foo bar spam
eggs foo bar
spam eggs foo
bar spam eggs
foo bar spam
eggs foo bar
spam eggs foo
bar spam eggs
foo bar spam
eggs
于 2013-07-05T16:31:28.127 回答
2

我可能误解了您的要求,但我认为您的问题是您想要执行以下操作:

  • 如果字符串超过 100 个字符,请删除最后一个逗号和/或空格。
  • 然后,将字符串截断为 100 个字符。
  • 如果截断发生在单词的正文中,则进一步截断字符串以删除最后一个单词片段。
  • 最后,创建一个以截断字符串为文件名的文本文件,并将原始字符串写入该文件。

我假设如果您没有剪切字符串,则您想将文件命名为与原始字符串相同的名称……而且,您只有一个字符串……不过,您不是很清楚,所以我可能假设错误。无论如何,你在这里:

the_string = "this is a very long string, here is a very long word, f" + ("o" * 50) + " good bye, string, "
filename_string = the_string
if len(the_string) > 100:  
    # if the 100th character is not a space or a comma
    if the_string[99] != " " and the_string[99] != ",":
        # split the string by words, and rejoin all but the last
        # if it ends with a comma, remove it (it won't end in a space because of split())
        filename_string = " ".join(stripped_string[:99].split()[:-1]).rstrip(",")
    else:
        # just remove the last space (and if there is one, a comma)
        filename_string = stripped_string[:100].rstrip(", ")
with open(filename_string, 'w') as outfile:
    outfile.write(the_string)

运行后,我得到一个名为的文件this is a very long string, here is a very long word,其内容为this is a very long string, here is a very long word foooooooooooooooooooooooooooooooooooooooooooooooooo good bye, string,. (最后有一个空格,但 SO 没有显示。)如您所见,我没有在“fooooooo”等中间切入,文件名没有以逗号或空格结尾.

如果您想对任何旧字符串执行此操作,那么请更改the_string...或者您可以使用raw_input()它来获取用户输入...或者您可以使用该argparse模块来获取命令行参数。您进行研究以弄清楚如何做到这一点。

于 2013-07-05T17:24:24.090 回答