Вырезание строки, если она слишком долго сохраняет оригинал в Python 2.7.2

Вопрос:

Я хочу уметь вычислять длину строки, включая blancs между словами, и если она превышает 100 символов, я должен ее разрезать. Вот пример строки:

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

Я не хочу вырезать слова, поэтому, если в середине слова встанет 100 символов, мне нужно вернуться в конце слова. Последний бланк и запятая должны быть удалены. Исходная строка должна быть сохранена в виде текстового файла, а имя файла должно быть строкой.

Любая помощь?

Лучший ответ:

Я, вероятно, неправильно понял то, что вы просили, но я решил, что вы хотите сделать следующее:

  • Если строка была длиннее 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 для получения аргументов командной строки. Вы проводите исследование, чтобы выяснить, как это сделать.

Ответ №1

Вы можете использовать модуль 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

Оцените статью
TechArks.Ru
Добавить комментарий