Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 16, 2010 20:05:07

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

задача по текстовому файлу

помогите решить:
дано целое число К и текстовый файл. Вставить пустую строку после строки файла с номером К.



Офлайн

#2 Дек. 16, 2010 21:03:29

python4ik
От:
Зарегистрирован: 2010-01-05
Сообщения: 251
Репутация: +  0  -
Профиль   Отправить e-mail  

задача по текстовому файлу

Немного подзабыл Питон :) , но может как-то так? :

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)

Офлайн

#3 Дек. 16, 2010 21:07:43

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

задача по текстовому файлу

Откуда это повальное стремление засосать весь файл в память? Кроме того очевидного факта, что файлы бывают большими и в память банально не влезут непонятно вообще зачем это делать-то? Читаем из одного построчно, пишем в другой. потом переименовываем в конце и все. Как пример с чтением файлов, так readlines, прям болезнь какая-то, извините.



Отредактировано (Дек. 16, 2010 21:08:08)

Офлайн

#4 Дек. 16, 2010 21:21:08

python4ik
От:
Зарегистрирован: 2010-01-05
Сообщения: 251
Репутация: +  0  -
Профиль   Отправить e-mail  

задача по текстовому файлу

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)

Офлайн

#5 Дек. 16, 2010 21:54:53

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

задача по текстовому файлу

класс, спасибо python4ik, за простой код с комментариями.
только надо было добавить i = int(input()), так как input() по умолчанию возвращает переменную в строковом типе и без int() прога не работала



Отредактировано (Дек. 16, 2010 21:57:45)

Офлайн

#6 Дек. 16, 2010 22:23:05

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

задача по текстовому файлу

совсем другое дело. Только скрипач, то бишь xreadlines() не нужен. Все-таки это болезнь :)



Офлайн

#7 Дек. 16, 2010 22:42:36

python4ik
От:
Зарегистрирован: 2010-01-05
Сообщения: 251
Репутация: +  0  -
Профиль   Отправить e-mail  

задача по текстовому файлу

а почему? скрипач xreadlines() не нужен. Ведь как я помню, он вроде читает не весь файл в память, а по строчно, экономя память!
Если честно, даже не заглядывал в нете на описание xreadlines() . По памяти (не спорю , могу ошибаться!) .

спасибо python4ik
Та это я так, чтобы не забыть язык! :) тренируюсь!
так как input() по умолчанию
это код для Питона 2.6 .В нём input() возврашает целое число!



Отредактировано (Дек. 16, 2010 23:08:41)

Офлайн

#8 Дек. 16, 2010 23:46:21

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

задача по текстовому файлу

xreadlines конечно лучше, чем readlines, но он просто избыточен. Достаточно было написать for x in f1. Это известная идиома цикла чтения по строкам. Кроме того str(x) в вашем коде тоже избыточен, поскольку x и так строка. Ну и с нумерацией нужно бы уточнить. Вряд ли в задании ‘после строки файла с номером К’ означает нумерацию с нуля, как в вашем коде. Скорее с единицы.



Офлайн

#9 Дек. 17, 2010 14:19:02

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

задача по текстовому файлу

помагите еще с одной задачей:
дан текстовый файл. вывести последнее слова текста наимеьшей длины. Словом считать набор символов, не содержащий пробелов и ограниченный пробелами или началом/концом строки.

вот мой код, только он выводит ошибочно:

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)



Офлайн

#10 Дек. 17, 2010 15:14:49

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

задача по текстовому файлу

вот сделал, думаю это более оптимальный код, чем код выше

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)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version