Страницы

Поиск по вопросам

среда, 18 декабря 2019 г.

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

#python


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

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



Чтобы вывести количество строк в файле, не обязательно сами строки сохранять, достаточно просто посчитать сколько раз символ новой строки встречается в тексте: 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: {nproxies} proxies, {nuser_agents} user-agents, ' '{nreferrers} referers'.format( nproxies=count_lines('proxy.txt'), nuser_agents=count_lines('user-agents.txt'), nreferrers=count_lines('referers.txt')))

Ответ 2



Используйте len print('Loaded: ', len(ips), 'proxies,', len(ua), 'user-agents,', len(ref), 'referers')

Ответ 3



Если проникнуться дзеном пайтона: sum(1 for line in open('file', ‘r’)) На мой взгляд это то, что вам нужно, в легко понятном виде.

Ответ 4



Вывести количество строк с помощью регулярного выражения. Особенность. Если последняя строка не пустая, то выведет количество на 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:]

Ответ 5



f=open('proxy.txt') i=0 for line in f: i i+=1 print(i)

Комментариев нет:

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