Вывести количество строк в файле
Подскажите, пожалуйста, как вывести количество строк, загруженных из файла? Я написал следующий код, но он выводит именно содержимое строк. А мне нужно количество:
def file_load(): with open("proxy.txt") as proxy: ips = [row.rstrip() for row in proxy] with open("user-agents.txt") as user_agents: ua = [row.rstrip() for row in user_agents] with open("referers.txt") as referers: ref = [row.rstrip() for row in referers] print('Loaded: ', ips, 'proxies,', ua, 'user-agents,', ref, 'referers')
Отслеживать
задан 1 авг 2016 в 10:24
JamesJGoodwin JamesJGoodwin
3,968 6 6 золотых знаков 39 39 серебряных знаков 74 74 бронзовых знака
7 ответов 7
Сортировка: Сброс на вариант по умолчанию
Чтобы вывести количество строк в файле, не обязательно сами строки сохранять, достаточно просто посчитать сколько раз символ новой строки встречается в тексте:
def count_lines(filename, chunk_size=1<<13): with open(filename) as file: return sum(chunk.count('\n') for chunk in iter(lambda: file.read(chunk_size), ''))
Файл открывается в текстовом режиме (перевод строки преобразуется в '\n' на всех системах), читается блоками по 8K символов в каждом до конца файла и количество '\n' в каждом блоке суммируется, чтобы найти общее число строк.
Код предполагает, что все строки, включая последнюю, заканчиваются символом новой строки также как wc -l утилита (принято на POSIX, иначе например, подумайте что будет, если вызвать cat *.txt ). Если последний символ не новая строка, последняя строка не считается (руками единицу добавить можно в этом случае).
Имея count_lines() функцию, легко получить желаемый вывод:
print('Loaded: proxies, user-agents, ' ' referers'.format( nproxies=count_lines('proxy.txt'), nuser_agents=count_lines('user-agents.txt'), nreferrers=count_lines('referers.txt')))
Отслеживать
ответ дан 1 авг 2016 в 18:16
52.3k 11 11 золотых знаков 108 108 серебряных знаков 312 312 бронзовых знаков
@Igor: в ответе явно сказано: "читается блоками по 8K символов в каждом". В памяти только один блок одновременно присутствует. Другими словами, можно большие файлы свободно таким образом читать, не боясь всю память съесть.
1 авг 2016 в 18:42
@Igor: код в ответе работает как для маленьких так и для больших файлов. Нельзя ожидать, что все люди, которые находят в поисковике вопрос: "Вывести количество строк в файле" будут иметь маленькие файлы. Если вас интересует производительность, то код, похожий на используемый в ответе, может работать даже быстрее C++ аналога, сравнимо с wc -l вариантом
1 авг 2016 в 19:01
Для огромных файлов которые не влезают в память это действительно лучший вариант из тех что встречал ранее. Да и кроме счетчика строк file.read(chunk_size) можно ведь использовать для других операций, для бинарных файлов тоже скорее всего будет работать.
1 авг 2016 в 19:14
Нашел ошибку в данном методе пока писал вариант с регулярными выражениями. Последнего \n может не быть, будет на 1 элемент меньше. В коде нужно будет проверять конец файла и последние символы для правильного расчета.
1 авг 2016 в 19:53
@Igor Нет необходимости два раза файл читать. Достаточно, явный цикл использовать и добавить единицу в конце, если необходимо: ..chunk = "\n" $ for chunk in iter(..): nlines += chunk.count('\n') $ return nlines + (not chunk.endswith('\n'))
1 авг 2016 в 20:25
Если проникнуться дзеном пайтона:
sum(1 for line in open('file', ‘r’))
На мой взгляд это то, что вам нужно, в легко понятном виде.
Отслеживать
ответ дан 19 мар 2017 в 20:07
MrNinjamannn MrNinjamannn
209 3 3 серебряных знака 6 6 бронзовых знаков
print('Loaded: ', len(ips), 'proxies,', len(ua), 'user-agents,', len(ref), 'referers')
Отслеживать
ответ дан 1 авг 2016 в 10:29
Abbasov Alexander Abbasov Alexander
161 4 4 бронзовых знака
Тогда выводится вот такая строка: ('Loaded: ', 274, 'proxies,', 7478, 'user-agents,', 350, 'referers') А я хочу, чтобы была такая строка: Loaded: 274 proxies, 7478 user-agents, 350 referers
1 авг 2016 в 10:30
print('Loaded: <> proxies, <> user-agents, <> referers'.format(len(ips), len(ua), len(ref)))
1 авг 2016 в 10:51
@kmmik спасибо!
1 авг 2016 в 10:55
Вывести количество строк с помощью регулярного выражения. Особенность. Если последняя строка не пустая, то выведет количество на 1 элемент меньше.
import re # выведет все строки включая пустые len(re.findall(r"[\n']+?", open('bash.txt').read())) # выведет количество без пустых строк len(re.findall(r"[\n']+", open('bash.txt').read()))
На больших файлах ко всему файлу сразу применять не желательно, возможно проверить на пустые строки построчно или прочитав часть файла, потом сложив длину.
пример текстового файла
1. sudo pip3 install django-markdown-deux 2. sudo pip3 install django-filter 3. sudo pip3 install sorl-thumbnail 4. sudo apt-get install libjpeg62 libjpeg62-dev zlib1g-dev 5. sudo pip3 install Pillow 6. sudo apt-get install libgraphicsmagick++-dev 7. sudo apt-get install libboost-python1.40-dev 8. sudo apt-get install imagemagick 9. sudo apt-get install graphicsmagick 10. 11. 12. sudo apt-get install libmagickwand-dev 13. sudo pip3 install Wand 14. 15. sudo python3 manage.py makemigrations thumbnail
Как это работает. В данном случае жадность регулярного выражения отключена.
>>> re.findall(r"[\n']+?", open('bash.txt').read()) ['\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n'] 14
Жадность включена, из-за жадности регулярных выражений \n\n будут вместе там где ничего нет кроме переноса
>>> re.findall(r"[\n']+", open('bash.txt').read()) ['\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n', '\n\n\n', '\n', '\n\n', '\n'] 11
Если посчитаем стандартно, то получим включая пустые строки, что пустая строка тоже строка. Этот метод считает всегда количество строк как мы это понимаем.
>>> len(open('bash.txt').readlines()) 15
Причина по которой отличается количество
'sudo pip3 install django-markdown-deux\nsudo pip3 install django-filter\nsudo pip3 install sorl-thumbnail\nsudo apt-get install libjpeg62 libjpeg62-dev zlib1g-dev\nsudo pip3 install Pillow\nsudo apt-get install libgraphicsmagick++-dev\nsudo apt-get install libboost-python1.40-dev\nsudo apt-get install imagemagick\nsudo apt-get install graphicsmagick\n\n\nsudo apt-get install libmagickwand-dev\nsudo pip3 install Wand\n\nsudo python3 manage.py makemigrations thumbnail'
видна здесь, в конце нет переноса строки который считаем.
Вариант исправления количества строк для регулярных выражений, файл придется читать второй раз с конца.
from __future__ import with_statement #tell() with open('bash.txt', "r") as f: f.seek (0, 2) fsize = f.tell() f.seek (max (fsize-68, 0), 0) lines = f.readlines() lines[-1:] if '\n' in lines[-1:]: print("no") else: print("+1")
Если символа переноса в последней строке нет, то прибавить плюс 1, в данном случае просто вывод на экран.
Алтернативное решение этой же проблемы чтение файла с начала построчно, далее взять последнюю строку и проверить в ней символ
open('bash.txt', "r").readlines()[-1:]
Как получить количество строк в DataFrame библиотеки Pandas
Одной из распространенных задач при работе с данными в Python с использованием библиотеки Pandas является подсчет строк в DataFrame. Например, может потребоваться узнать размерность данных, с которыми предстоит работать, или проверить, сколько данных осталось после фильтрации или удаления определенных строк.
Библиотека Pandas предоставляет несколько способов, которые позволяют получить количество строк в DataFrame.
Использование атрибута shape
Один из способов — использовать атрибут shape у объекта DataFrame. Этот атрибут возвращает кортеж, содержащий количество строк и столбцов в DataFrame. Чтобы получить количество строк, нужно обратиться к первому элементу этого кортежа.
import pandas as pd # Создание DataFrame df = pd.DataFrame(< 'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e'] >) # Получение количества строк rows_count = df.shape[0]
Использование функции len()
Еще один способ — это использовать встроенную в Python функцию len() . Эта функция возвращает количество строк в DataFrame.
import pandas as pd # Создание DataFrame df = pd.DataFrame(< 'A': [1, 2, 3, 4, 5], 'B': ['a', 'b', 'c', 'd', 'e'] >) # Получение количества строк rows_count = len(df)
Оба этих способа позволяют быстро и эффективно получить количество строк в DataFrame, что может быть полезно при проведении анализа данных.
Как посчитать количество строк в txt?
Как посчитать количество строк в txt?
Допустим есть good.txt.
Как сделать так чтобы программа посчитала количество строк и добавила это в переменную countline
Можно через цикл я знаю, но возможно есть более быстрый способ?
- Вопрос задан более трёх лет назад
- 1860 просмотров
1 комментарий
Простой 1 комментарий

Можно через цикл я знаю
И отметил решением подсчет через цикл.
Решения вопроса 2

Andrey Dugin @adugin Куратор тега Python
Быстрее всего будет замапить в память:
Для сравнения, вариант от longclaps:
И ещё вариант от Зёма Подушкин:
Если файл огромный - можно поштучно искать переносы строки:
Либо ещё быстрее - читать блоками:

Ответ написан более трёх лет назад
Нравится 2 3 комментария
Как посчитать количество строк в текстовом файле - Python
![]()
Хочешь стать успешным разработчиком
приложений? Тогда добро пожаловать к нам.

Все права защищены © 2014-2024 GURU
Наши контакты
Позвоните мне
Позвоните мне
Список поддерживаемых устройств
Mac mini 2020 года и новее
iMac 2019 года и новее
iMac Pro 2017 года
Mac Pro 2019 года и новее
MacBook Air 2019 года и новее
MacBook 2017 года и новее MacBook Pro 2018 года и новее
Приложение в App Store
В App Store публикуется только то приложение, которое есть в данной программе курса, данное приложение должно быть написано под руководством преподавателя
Приложение публикуется только в одном экземпляре
Сторонние приложения, которые не были написаны в данном курсе и или под руководством преподавателя мы не публикуем в App Store
«Пятиминутка» - в начале урока, первые 5 минут, Вы сможете ответить на вопросы – устно, из прошлых тем. А уже после этого, продолжите урок – по теме.
«Пятиминутка», будет не на каждом уроке, а только иногда.
Мы предполагаем, это улучшит процесс обучения на 2% – 4.5%
Блиц – это проверка усвоенного материала учеником.
В течение 1 часа (60 минут) преподаватель задаёт вопросы по пройденным темам, и ученик пишет код, одновременно комментируя и отвечая на вопросы преподавателя.
Мы уверены в эффективности данного подхода, он позволит нам понять, уровень усвоенного материала, а так же выявить темы, которые были не до конца усвоены и требуют дополнительного домашнего задания.
Тем самым сможем анализировать ответы, улучшая программы курсов и обучающий процесс.
На данном уроке, будут практические задачи, разных уровней сложности, по пройденным темам курса. Все практические задания будут объяснены - показано несколько вариантов, как можно их решить разным способом – усложнить или упростить.