Как посчитать количество строк в файле python
Перейти к содержимому

Как посчитать количество строк в файле python

  • автор:

Количество строк в файле

Напишите скрипт get_lines.py, который принимает в качестве параметра —file имя текстового файла, а в результате своей работы выдает на экран количество строк в этом файле (в случае возникновения любой ошибки при работе с файлом кол-во строк в нем можно считать равным 0).

Скрипт должен быть оформлен в виде модуля: в нем должна быть реализована функция count_lines(«путь до файла»), которая, собственно говоря, и решает поставленную задачу.

Помните, что этот скрипт можно вызывать независимо, например, так:

$ python3 get_lines.py —file filename.txt
А можно использовать в работе другой программы с помощью директивы import. В этом случае скрипт ничего не должен выполнять, а должен только реализовывать функцию.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
import argparse try: parser = argparse.ArgumentParser() parser.add_argument("--file") args = parser.parse_args() def count_lines(): print(sum(1 for _ in open(args.file))) def main(): count_lines(args.file) if __name__ == "__main__": main() except Exception: print(0)

Вывести количество строк в файле

Подскажите, пожалуйста, как вывести количество строк, загруженных из файла? Я написал следующий код, но он выводит именно содержимое строк. А мне нужно количество:

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 золотых знаков 38 38 серебряных знаков 73 73 бронзовых знака

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.2k 11 11 золотых знаков 108 108 серебряных знаков 311 311 бронзовых знаков

@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:] 

Как посчитать количество строк в текстовом файле - Python

facebook vk instagram Телеграм youtube

Хочешь стать успешным разработчиком
приложений? Тогда добро пожаловать к нам.

обучись профессии будущего

Все права защищены © 2014-2023 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 минут) преподаватель задаёт вопросы по пройденным темам, и ученик пишет код, одновременно комментируя и отвечая на вопросы преподавателя.

Мы уверены в эффективности данного подхода, он позволит нам понять, уровень усвоенного материала, а так же выявить темы, которые были не до конца усвоены и требуют дополнительного домашнего задания.

Тем самым сможем анализировать ответы, улучшая программы курсов и обучающий процесс.

На данном уроке, будут практические задачи, разных уровней сложности, по пройденным темам курса. Все практические задания будут объяснены - показано несколько вариантов, как можно их решить разным способом – усложнить или упростить.

Посчитать количество строк, слов и букв в текстовом файле

Напишите программу, которая считает количество символов, слов и строк в переданном ей файле.

import sys # argv - список аргументов командрой строки # argv[0] - имя самого файла-скрипта # argv[1] - первый аргумент, # здесь - имя обрабатываемого файла fname = sys.argv[1] # Переменные для подсчета строк, слов и букв. lines = 0 words = 0 letters = 0 # Функция open() открывает переданный ей файл # и возвращает объект, итерация по которому # позволяет последовательно извлекать строки файла. for line in open(fname): # Была получена очередная строка. # Она присваивается переменной line. # Счетчик строк следует увеличить на 1. lines += 1 # С помощью len определяется # количество символов в строке # и добавляется к счетчику букв. letters += len(line) # Код ниже считает количество слов в текущей строке. # Флаг, сигнализирующий нахождение за пределами слова. pos = 'out' # Цикл перебора строки по символам. for letter in line: # Если очередной символ не пробел, # а флаг в значении "вне слова", # значит начинается новое слово. if letter != ' ' and pos == 'out': # Поэтому надо увеличить счетчик слов на 1, words += 1 # а флаг поменять на значение "внутри слова". pos = 'in' # Если очередной символ пробел, elif letter == ' ': # то следует установить флаг # в значение "вне слова". pos = 'out' # Вывод количеств строк, слов и символов на экран. print("Lines:", lines) print("Words:", words) print("Letters:", letters)
Похожие записи:
  1. Эффективный ввод-вывод в разных языках программирования
  2. Код Цезаря
  3. Docstring в Django
  4. Комбинации

Добавить комментарий Отменить ответ

Данные файлы можно скачать по ссылке: https://disk.yandex.ru/d/fb2OXSV0QpLk3w 8 кусков парчи. Слайды для 1 урока.pdf8

Околонаучная сказка, отчасти инспирированная идеями New Age, повествует об удивительной жизни обитателей морского дна.

Власть часто вынуждает тех, кто обличён ею, совершать неблаговидные поступки. Власть меняет человека или заставляет его

Марина Баринова – талантливая писательница из Санкт-Петербурга. Известна своими книгами в жанре фэнтези. Предпочитает

1570 год. Новгород окончательно покорен Иваном Грозным. Но не все его жители готовы склониться

На демонопоклонников объявлена настоящая охота. Силовики ведущих стран мира находят тайные базы с лабораториями,

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *