Форум сайта python.su
0
Доброго времени суток!
Подскажите пожалуйста в чем может быть ошибка.
Есть файл my_file.txt с текстом, например:
Bravely bold Sir Robin rode forth from Camelot
Yes, brave Sir Robin turned about
He was not afraid to die, O brave Sir Robin
And gallantly he chickened out
He was not at all afraid to be killed in nasty ways
Bravely talking to his feet
Brave, brave, brave, brave Sir Robin
He beat a very brave retreat
Алгоритм должен записать в отдельный файл нечетные строки
j=0 f=open('my_file.txt','r') xlist=f.readlines() f.close f=open('my_file2.txt','w') f.close for i in xlist: if j%2==1: f=open('my_file2.txt','a') f.writelines(str(j)+xlist[j]) f.close j+=1
Отредактировано EvgenKlim (Май 12, 2014 14:03:38)
Офлайн
0
Простите, а вы зачем в цикле
for i in xlist: if j%2==1: f=open('my_file2.txt','a') f.writelines(str(j)+xlist[j]) f.close j+=1
j=0 f1=open('my_file.txt','r') xlist=f1.readlines() f1.close f2=open('my_file2.txt','a') for i in xlist: if j%2==1: f2.writelines(str(j)+xlist[j]) j+=1 f2.close
j=0 with open("my_file.txt", "r") as f1: xlist=f1.readlines() with open("my_file2.txt", "a") as f2: for i in xlist: if j%2==1: f2.writelines(str(j)+xlist[j]) j+=1
Отредактировано yastreboff (Май 12, 2014 14:09:40)
Офлайн
34
Для чтения файла лучше всего использовать конструкцию with:
with open('my_file.txt', 'r') as f: lines = f.readlines() print lines
>>> a = range(1, 11) >>> a [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> a[::2] [1, 3, 5, 7, 9] >>> a[1::2] [2, 4, 6, 8, 10] >>>
with open('my_file.txt', 'r') as f: lines = f.readlines() with open('my_file2.txt', 'w') as f: f.write(''.join(lines[::2]))
Офлайн
0
GreyZmeem, красиво 
Офлайн
88
Вообще, пропущены скобки у close(), а функциональный аналог такой:
from itertools import islice with open('my_file.txt','r') as f: xlist=f.readlines() for n, l in islice(enumerate(xlist), 1, None, 2): with open('my_file2.txt','a') as f: f.writelines(str(n)+l)
Офлайн
857
#!/usr/bin/env python3 ifname = '/etc/passwd' ofname = 'out.txt' with open(ifname, encoding='utf-8') as fin, \ open(ofname, 'w', encoding='utf-8') as fout: for i, s in enumerate(fin): if i % 2 == 1: fout.write('{} {}'.format(i, s))
Офлайн
0
Спасибо всем за помощь!!!
Офлайн