jeha
Июль 4, 2009 10:35:04
У меня есть текстовый файл, содержимое которого добавляеться построчно. Т.е. получаеться что новая строка это новый элемент. Необходимо при открытии файла узнать количество строк. Мне приходит в голову считать количество символов “\n” , но может есть способ проще?
slivlen
Июль 4, 2009 12:15:08
len(open('file', ‘r’).readlines()) если файл не очень большой.
ZZZ
Июль 4, 2009 12:44:24
sum(1 for l in open('file', ‘r’)) если файл очень большой.
Enchantner
Июль 6, 2009 00:49:35
slivlen
ZZZ
Интересно, только кто файл закрывать в таком виде будет? :)
igor.kaist
Июль 6, 2009 10:44:33
Он сам закроется…
Enchantner
Июль 6, 2009 11:11:56
igor.kaistну я лично привык руками все делать, а не оставлять Garbage Collector'у… На хабре народ вроде даже проверял - возможны проблемы при таком подходе. Вот тут:
http://habrahabr.ru/blogs/python/62383/#comment_1722446
ZZZ
Июль 6, 2009 15:05:06
Вот уже сколько лет пишу на этом замечательном языке, сколько сотен (тысяч?) файлов им открыл и не закрыл руками, а проблемы с этим у меня ни разу не возникало. Так что предлагаю “забить и не парится”. Тем более, что файл открывается только для чтения и никакие кэши нам не страшны.
А если уж так хочется сделать это руками, то надо добавить ещё две строчки кода, что проблемой обычно не является.
P.S. Да, если уж всё нравится делать руками, то может стоит посмотреть на более низкоуровневый язык? Си? OCAML?
slivlen
Июль 7, 2009 10:40:55
Enchantner
ну я лично привык руками все делать, а не оставлять Garbage Collector'у…
gc в python как правило оперативно удаляет неиспользованные объекты, даже если программа не большая, в отличии н-р от той же java, где gc за время выполнения небольшой программы, может вообще ни разу не отработать. Ну и полностью согласен с
ZZZ, у меня тоже не возникало проблем с незакрытыми файлами даже в крупных web проектах на python.
caufman
Март 20, 2013 19:13:54
Есть вот такой вот код:
import sys
from PyQt4 import QtCore, QtGui
from random import randint
# Загрузка словарей
dic_features_file = open ('L:/src/generator/dic/features.txt', 'rt')
# Декодируем полученные словари в UTF-8
dic_features_txt = dic_features_file .read() .decode ('utf-8')
# Определяем количество строк в словарях
dic_features_line = len (dic_features_file.readlines())
print dic_features_txt
print 'Strok: ', dic_features_line
который на выходе выдает следующий результат:
№;Именительный (кто, что);Винительный (кого, что);Род
1;трусливый;трусливого;он
2;трусливая;трусливую;она
3;отважный;отважного;он
4;отважная;отважную;она
5;прекрасный;прекрасного;он
6;прекрасная;прекрасную;она
7;ничтожный;ничтожного;он
8;ничтожная;ничтожную;она
9;уродливый;уродливого;он
10;уродливая;уродливую;она
Strok: 0
почему ноль то???
Shaman
Март 20, 2013 20:08:15
потому что ‘rt’