Как узнать количество строк в файле 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)

Как посчитать количество строк в txt?

Как посчитать количество строк в txt?
Допустим есть good.txt.
Как сделать так чтобы программа посчитала количество строк и добавила это в переменную countline
Можно через цикл я знаю, но возможно есть более быстрый способ?

  • Вопрос задан более трёх лет назад
  • 1819 просмотров

1 комментарий

Простой 1 комментарий

longclaps

Можно через цикл я знаю

И отметил решением подсчет через цикл.

Решения вопроса 2

adugin

Andrey Dugin @adugin Куратор тега Python

Быстрее всего будет замапить в память:
5dc9b8edb06b0749167288.png
Для сравнения, вариант от longclaps:
5dc9b90f63bfa499301820.png
И ещё вариант от Зёма Подушкин:
5dc9c1251fa44420646925.png
Если файл огромный — можно поштучно искать переносы строки:
5dc9be0d116c1569142912.png
Либо ещё быстрее — читать блоками:
5dc9ca3aeb63a616227656.png

Ответ написан более трёх лет назад

Нравится 2 3 комментария

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

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

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 серебряных знаков 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 серебряных знаков 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:] 

Узнать количество строк в файле Linux

Довольно частенько нужно подсчитать количество файлов при выводе в консоли BASH. Хорошо если файлов 10 единиц. Как быть если их сотни и у каждого файла сложное имя. Тут идеально подойдёт команда wc. Её наилучше использовать вместе с фильтром. Например с командой grep команда wc хорошо сочетается. Возможно подсчитать количество слов в документе.

С помощью команды wc вы можете подсчитать количество строк, слов и символов в указанном файле. Если указано более одного файла в инструктивной строке, то программа wc осуществляет подсчет строк, слов и символов в каждом файле и потом выдает общее число. Вы можете с помощью ключей указать либо подсчет лишь строк, или только слов, или символов. Синтаксис команды:

Подсчет строк, слов и знаков с помощью wc

Система отвечает строкой в следующем формате: l w c файл

Читайте также: Настройка прокси-сервера Squid

где l - число строчек в файле;
w - число слов в файле;
c - число символов в файле.

Чтобы подсчитать количество строк, слов и символов в нескольких файлах, используйте следующий формат:

Система говорит следующим образом:

l w c файл1
l w c файл2
l w c total

Число строк, слов и символов для файл1 и файл2 отражается на отдельных строках. На последней строке отображается общее число строк, слов и знаков в двух файлах.

Подсчет данных в документе

wc text.txt
вывод: 40 149 947 text.txt

В первоначальной колонке содержится количество строк, во второй кол-во слов, в третьей кол-во знаков

wc -l file.txt #вывести количество строк (ряд знаков, написанных или напечатанных в одну линию)
wc -c file.txt #вывести количество байт
wc -m file.txt #вывести число символов
wc -L file.txt #вывести длину самой длинной строки
wc -w file.txt #вывести число слов

Подсчёт данных в выводе командной строки Linux

ls -al | grep '.txt' | wc -l

Читайте также: Nexuiz 2.5 - FAQ по установке и настройке

ls -al | grep '.txt' | wc -w

Подсчет количества .txt-файлов в текущем каталоге с помощью wc:

При выводе в инструктивной строке очень часто попадают файлы с точками вместо имён .. или . .Тут необходимо отфильтровать вывод и только потом применять команду wc. Как подсчитать количество файлов в папки. Тут добавлена сортировка и удаление дублей. uniq — убирает дубли, перед unic обязана идти сортировка sort

Поиск количества файлов в директории Linux

ls | grep "name" | sort | uniq | wc -l

Подсчет уникальных строк и дубликатов в текстовом файле Linux

Буквально сегодня на работе столкнулся с довольно простой задачей, состоящей из двух подзадач: 1) нужно было подсчитать в текстовом файле количество уникальных строк 2) подсчитать в уже другом файле количество строчек, которые дублируются.

С этими задачами я справился и после этого подумал — по какой причине бы не написать небольшой пост, вдруг кому-нибудь пригодится. Подсчитаем в нём количество уникальных строчек с помощью следующей команды:

Читайте также: Как в Linux браузере исправить проблему доверенных сертификатов?

$ sort data.txt | uniq -u | wc -l

Всё достаточно просто. Утилита uniq с функцией -u выводит на экран уникальные строки (u—unique, видимо так) и с помощью | результат перенаправляется в утилиту wc , какая просто считает количество строк, т.к. исполняется с опцией -l. В самом начале нам необходимо просортировать входной поток данных (текстовый файл), иначе утилита uniq не сможет правильно подсчитать уникальные строки. Выполняется сортировка с помощью sort и результат, используя |, перенаправляется в uniq. После исполнения такой команды для файла data.txt на экран будет выведено число 5.

Для этого чтобы решить вторую подзадачу, сделаем всё тоже самое, только uniq станет выполнен с опцией -d (видимо d—duplicate):

$ sort data.txt | uniq -d | wc -l

В результате на экран выведено количество 2. Обе подзадачи решены достаточно простым способом. Записал небольшую демонстрацию кому забавно.

Подсчитать количество строк в файле Linux

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

cat filename.txt | wc -l

Подсчитать общее количество строк в файлах (именованная область данных на носителе информации) по шаблону. Если же вам необходимо подсчитать количество строк нескольких файлов, можете использовать шаблон, например:

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

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