Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 8, 2016 19:36:33

be_smmr
Зарегистрирован: 2016-06-08
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Отформатирование исходного файла.

Дан файл text.txt, содержащий некоторый достаточно длинный текст в

в одну строку

Отредактировано be_smmr (Июнь 9, 2016 20:35:05)

Офлайн

#2 Июнь 8, 2016 19:50:46

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Отформатирование исходного файла.

Покажите же широкой общественности ваше клавиатурное произведение

Офлайн

#3 Июнь 8, 2016 19:52:50

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Отформатирование исходного файла.

be_smmr
Я начал делать данную задачу через метод split(), когда цикл доходит до 150 элемента, идет вставка.
Вариантов может быть масса. В чем вопрос?



Офлайн

#4 Июнь 8, 2016 19:59:06

be_smmr
Зарегистрирован: 2016-06-08
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Отформатирование исходного файла.

Можете предложить свой вариант решения, даже не обязательно и в виде кода.
Просто

b = a.split(" ")
for i in range(len(b)):
    for j in range(len(b[i])):
будет просматривать каждый элемент, но так как мы удалили все пробелы - получается нужно отнять кол-во элементов перед элементом, где находится сам 150 символ и тогда уже делать вставку “/n” перед или после него. Но может есть что-то более удобное для реализации данной задачи?

Офлайн

#5 Июнь 8, 2016 20:24:30

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Отформатирование исходного файла.

be_smmr
Но может есть что-то более удобное для реализации данной задачи?
Вопрос понял.
1. Удобство понятие субъективное. Только вы и можете об этом судить.
2. Вопрос про удобство преждевременный. Ваш код неработоспособен, сначала надо сделать чтобы работало, потом задумываться об удобстве.
3. В питоне обычно пишут короче.
for word in b.split():
     count+=len(word)+1
     if count>150:
         pass
4 такой сплит как у вас непригоден
a=""" asd asd
qwe qwe
"""
>>> a.split(" ")
['', 'asd', 'asd\nqwe', 'qwe\n']



Офлайн

#6 Июнь 8, 2016 20:38:01

be_smmr
Зарегистрирован: 2016-06-08
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Отформатирование исходного файла.

Спасибо за данный код, но как реализовать именно тот момент, что перенос должен быть на 150 элементе, если он является пробелом или если 150 является любым иным символом - нужно после дойти до пробела и сделать срез.

Офлайн

#7 Июнь 8, 2016 21:03:11

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Отформатирование исходного файла.

be_smmr
Отформатировать исходный файл так, чтобы каждая строка была не
длиннее 150 символов
120 символов тоже не длинее 150. зачем тогда именно по 150 делить?
суть такая. берете 150 символов строки ищете первое вхождение пробела с конца строки stroka.rfind(' ')
вот вам срез по пробелу не более 150 символов. опять от индекса вхождения этого пробела берете 150 символов и опять ищете пробел с конца строки и так в цикле всю строку

Офлайн

#8 Июнь 8, 2016 22:14:12

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

Отформатирование исходного файла.

be_smmr
перенос должен быть на 150 элементе
Не путайте элементы, слова и буквы. Я привел практически рабочий код. вам надо добавить 3-4 строчки. Смысл такой если следующее слово делает строку длиннее 150 букв то надо перед печатью слова напечатать перевод строки.



Отредактировано doza_and (Июнь 8, 2016 22:18:37)

Офлайн

#9 Июнь 8, 2016 22:34:24

marvellik
Зарегистрирован: 2016-05-15
Сообщения: 639
Репутация: +  73  -
Профиль   Отправить e-mail  

Отформатирование исходного файла.

be_smmr
Отформатировать исходный файл так, чтобы каждая строка была не
длиннее 150 символов
где тут написано что перенос должен быть на 150 символе????
be_smmr
Переносы внутри слов не допускаются
так вы никогда не измените строку потому как 1 из 1000 вариантов что 150 символ будет пробел! поэтому ищете в строке пробел который ближе всех находиться возле 150 символа и по нему делите. получается согласно условию НЕ БОЛЕЕ 150 символов и Переносы внутри слов НЕ допускаются

Офлайн

#10 Июнь 8, 2016 22:54:25

be_smmr
Зарегистрирован: 2016-06-08
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

Отформатирование исходного файла.

a = "Длинный текст"
a_2 = ""
a_3 = ""
k = 0
k_2 = 100
for i in range(len(a)):
    if i == k_2:
        a_2 = a[k:k_2]
        b = a_2.rfind(' ')
        a_3 = a_2[k:b]
        k = b
        k_2 += 100
print(a_3)
Может как-то таким способом докрутить?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version