Форум сайта python.su
помогите решить:
дано целое число К и текстовый файл. Вставить пустую строку после строки файла с номером К.
Офлайн
Немного подзабыл Питон :) , но может как-то так? :
f = open('1.txt' , 'r')
l = f.readlines() #сохранение содержимого файла в список
i = input() #необходимая строка
l.insert(i+1 , '\n') #вставляется пустая строка
f = open('1.txt' , 'w') #открытие для записи резул-та
for x in l:
f.write(x)
f.close()
Отредактировано (Дек. 16, 2010 21:08:06)
Офлайн
Откуда это повальное стремление засосать весь файл в память? Кроме того очевидного факта, что файлы бывают большими и в память банально не влезут непонятно вообще зачем это делать-то? Читаем из одного построчно, пишем в другой. потом переименовываем в конце и все. Как пример с чтением файлов, так readlines, прям болезнь какая-то, извините.
Отредактировано (Дек. 16, 2010 21:08:08)
Офлайн
f1 = open('1.txt' , 'r')
f2 = open('2.txt' , 'w')
i = input()
n = 0
for x in f1.xreadlines():
f2.write(str(x))
if n == i:
f2.write('\n')
n += 1
f1.close()
f2.close()
Отредактировано (Дек. 16, 2010 21:22:05)
Офлайн
класс, спасибо python4ik, за простой код с комментариями.
только надо было добавить i = int(input()), так как input() по умолчанию возвращает переменную в строковом типе и без int() прога не работала
Отредактировано (Дек. 16, 2010 21:57:45)
Офлайн
совсем другое дело. Только скрипач, то бишь xreadlines() не нужен. Все-таки это болезнь :)
Офлайн
а почему? скрипач xreadlines() не нужен. Ведь как я помню, он вроде читает не весь файл в память, а по строчно, экономя память!
Если честно, даже не заглядывал в нете на описание xreadlines() . По памяти (не спорю , могу ошибаться!) .
спасибо python4ikТа это я так, чтобы не забыть язык! :) тренируюсь!
так как input() по умолчаниюэто код для Питона 2.6 .В нём input() возврашает целое число!
Отредактировано (Дек. 16, 2010 23:08:41)
Офлайн
xreadlines конечно лучше, чем readlines, но он просто избыточен. Достаточно было написать for x in f1. Это известная идиома цикла чтения по строкам. Кроме того str(x) в вашем коде тоже избыточен, поскольку x и так строка. Ну и с нумерацией нужно бы уточнить. Вряд ли в задании ‘после строки файла с номером К’ означает нумерацию с нуля, как в вашем коде. Скорее с единицы.
Офлайн
помагите еще с одной задачей:
дан текстовый файл. вывести последнее слова текста наимеьшей длины. Словом считать набор символов, не содержащий пробелов и ограниченный пробелами или началом/концом строки.
вот мой код, только он выводит ошибочно:
f=open('text/text30.txt','r')
l=f.readlines()
leng=len(l)
for i in l:
s=i.split()
buf=len(min(s))
if buf<=leng:
leng=buf
print (leng)
Офлайн
вот сделал, думаю это более оптимальный код, чем код выше
f=open('text/text30.txt','r')
leng=len(str(f))
for i in f:
s=i.split()
for i in s:
if len(i)<=leng:
leng=len(i)
print(leng)
Отредактировано (Дек. 17, 2010 15:16:30)
Офлайн