Сколько строк выведет программа

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

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,978 6 6 золотых знаков 35 35 серебряных знаков 70 70 бронзовых знаков

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’ в каждом блоке суммируется, чтобы найти общее число строк.

Задачи JS: Как найти простое число + Как найти все простые числа до 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
51.9k 11 11 золотых знаков 107 107 серебряных знаков 308 308 бронзовых знаков
1 авг 2016 в 18:42
1 авг 2016 в 19:01

Для огромных файлов которые не влезают в память это действительно лучший вариант из тех что встречал ранее. Да и кроме счетчика строк file.read(chunk_size) можно ведь использовать для других операций, для бинарных файлов тоже скорее всего будет работать.

1 авг 2016 в 19:14

Нашел ошибку в данном методе пока писал вариант с регулярными выражениями. Последнего n может не быть, будет на 1 элемент меньше. В коде нужно будет проверять конец файла и последние символы для правильного расчета.

1 авг 2016 в 19:53
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

9.2 Две половинки. «Поколение Python»: курс для начинающих. Курс Stepik

1 авг 2016 в 10:30
print(‘Loaded: <> proxies, <> user-agents, <> referers’.format(len(ips), len(ua), len(ref)))
1 авг 2016 в 10:51
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

Жадность включена, из-за жадности регулярных выражений nn будут вместе там где ничего нет кроме переноса

>>> re.findall(r»[n’]+», open(‘bash.txt’).read()) [‘n’, ‘n’, ‘n’, ‘n’, ‘n’, ‘n’, ‘n’, ‘n’, ‘nnn’, ‘n’, ‘nn’, ‘n’] 11

Если посчитаем стандартно, то получим включая пустые строки, что пустая строка тоже строка. Этот метод считает всегда количество строк как мы это понимаем.

>>> len(open(‘bash.txt’).readlines()) 15

Причина по которой отличается количество

‘sudo pip3 install django-markdown-deuxnsudo pip3 install django-filternsudo pip3 install sorl-thumbnailnsudo apt-get install libjpeg62 libjpeg62-dev zlib1g-devnsudo pip3 install Pillownsudo apt-get install libgraphicsmagick++-devnsudo apt-get install libboost-python1.40-devnsudo apt-get install imagemagicknsudo apt-get install graphicsmagicknnnsudo apt-get install libmagickwand-devnsudo pip3 install Wandnnsudo 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:]

Источник: ru.stackoverflow.com

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

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

Подсчет строк:
Ввести счетчик, присвоить ему 0.
Пока не будет достигнут конец файла, считывать очередную строку файла и увеличивать счетчик на 1.

Подсчет символов в строке:
Измерять длину очередной строки с помощью встроенный в язык программирования функции.

Подсчет слов в строке:

  1. Ввести счетчик слов и присвоить ему 0.
  2. Ввести флаговую переменную и присвоить ей 0 (сигнал нахождения вне слова).
  3. Пока не будет достигнут конец строки:
  1. Если очередной символ не пробел и флаг указывает на нахождение вне слова, то увеличить счетчик слов и присвоить флаговой переменной 1 (сигнал нахождения внутри слова).
  2. Если же очередной символ пробел, то присвоить флагу 0.
Читайте также:
Не удаляется программа с ПК

Pascal

var
f: text;
s: string;
line, chr, wrd: word;
i: byte;
flag: boolean;
begin
assign(f,’text.txt’);
reset(f);
line := 0;
while not EOF(f) do begin
readln(f,s);
write(s, ‘ — ‘);

line := line + 1;

chr := length(s);
write(chr, ‘ симв., ‘);

wrd := 0;
flag := false;
for i:=1 to chr do
if (s[i] <> ‘ ‘) and (flag = false) then begin
wrd := wrd + 1;
flag := true;
end
else
if s[i] = ‘ ‘ then flag := false;
writeln(wrd, ‘ сл.’);
end;
close(f);
writeln(line,’ стр.’);
end.

Hello world! — 12 симв., 2 сл.
Привет мир! — 20 симв., 2 сл.
One, two, three — 15 симв., 3 сл.
Один, два, три — 24 симв., 3 сл.
4 стр.

Файл выполнен в среде GNU/Linux, компилятор FreePascal. Русские символы считаются за 2 символа. Например, в данном примере во второй строке 9 кириллических символа, пробел и восклицательный знак: 18 + 2 = 20 символов.

Язык Си


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

#include < stdio.h>
#include < string.h>
#define N 255
main() FILE *f;
char s[N];
unsigned short line, word, flag, i;
line = 0;
f = fopen(«text.txt»,»r»);
while (fgets(s, N, f) != NULL) line += 1;

word = 0;
flag = 0;
for (i=0; i < strlen(s); i++)
if (s[i] != ‘ ‘ flag == 0) word += 1;
flag = 1;
> else
if (s[i] == ‘ ‘) flag = 0;

printf(«%st%ld симв., %d сл.n»,s,strlen(s),word);
>
printf(«%d стр.n», line);
fclose(f);
>

Hello world!
13 симв., 2 сл.
Привет мир!
21 симв., 2 сл.
One, two, three
16 симв., 3 сл.
Один, два, три
25 симв., 3 сл.
4 стр.

Тот же «эффект», что и в Паскале: кириллический символ считается за 2.

Функция fgets() считывает строку вместе с символом перехода на новую строку. Аргумент N не позволяет считать больше указанного количества символов, но длина строки определяется по количеству считанных (т.е. фактической длиной строки).

Python


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

f = open(‘text.txt’)
line = 0
for i in f:
line += 1

flag = 0
word = 0
for j in i:
if j != ‘ ‘ and flag == 0:
word += 1
flag = 1
elif j == ‘ ‘:
flag = 0

print(i,len(i),’симв.’,word,’сл.’)

print(line,’стр.’)
f.close()

Hello world!
13 симв. 2 сл.
Привет мир!
12 симв. 2 сл.
One, two, three
16 симв. 3 сл.
Один, два, три
15 симв. 3 сл.
4 стр.

Символ перехода на новую строку учитывается.

КуМир

использовать Файлы П
алг
нач
цел f, line, word, char, in, i
лит s
line := 0
word := 0
char := 0
f := открыть на чтение («текст.txt»)
нц пока не конец файла (f)
Фввод f, s
line := line + 1
вывод s, нс
char := char + длин(s)
in := 0
нц для i от 1 до длин(s)
если s[i] <> » » и in = 0 то
word := word + 1
in := 1
иначе
если s[i] = » » то in := 0 все
все
кц
кц
закрыть(f)
вывод нс, «строк — «, line, нс
вывод «слов — «, word, нс
вывод «символов — «, char
кон

Привет, Мир!
Hello World!
5, 4 .

строк — 3
слов — 7
символов — 32

Здесь считается общее количество слов и символов.

Basic-256

open «text.txt»
ln = 0
while not eof
ln = ln + 1
s$ = readline
i = 1
word = 0
flag = 0
while i c$ = mid(s$,i,1)
if c$ <> » » and flag = 0 then
word = word + 1
flag = 1
else
if c$ = » » then flag = 0
endif
i = i + 1
endwhile

Читайте также:
Смартфон как видеорегистратор программа

print s$ + length(s$) + «, » + word
endwhile
close

print «Строк: » + ln

Hello world!
13, 2
Привет мир!
12, 2
One, two, three
16, 3
Один, два, три
15, 3
Строк: 4

Источник: gospodaretsva.com

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

Цикл for языка Python извлекает из файлового объекта данные построчно (одну строку на каждой итерации цикла). Таким образом, количество итераций цикла определит количество строк в файле.

Встроенная функция len() языка Python считает количество элементов в передаваемой в нее структуре. С ее помощью находится количество символов в каждой строке.

Строковый метод split() разбивает строку на части. По-умолчанию разделение происходит по местам расположения пробелов в строке. Таким образом, мы можем определить количество слов в каждой строке, посчитав с помощью len() слова в получившемся после применения split() списке.

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

file = open(‘text.txt’) lines = 0 words = 0 symbols = 0 for line in file: lines += 1 words += len(line.split()) symbols += len(line) print(«Lines:», lines) print(«Words:», words) print(«Symbols:», symbols)

Пусть содержимое файла text.txt будет таким:

one two three city town big small

Тогда программа даст следующий результат:

Lines: 3 Words: 7 Symbols: 34

Cимволами считаются не только буквы, также пробелы и переходы на новую строку (символ ‘n’ ). Если требуется не учитывать переход на новую строку как символ, его можно «отрезать» с помощью строкового метода strip() . Делается это перед тем, как строка передается в функцию len() : symbols += len(line.strip(‘n’)) .

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

file = open(‘text.txt’) text = file.read() lines = 0 words = 0 symbols = 0 in_word = False for char in text: symbols += 1 if char == ‘n’: lines += 1 if char != ‘ ‘ and char != ‘n’ and in_word == False: words += 1 in_word = True elif char == ‘ ‘ or char == ‘n’: in_word = False print(«Lines:», lines) print(«Words:», words) print(«Symbols:», symbols)

Здесь на каждой итерации цикла мы имеем дело не с целой строкой, а с очередным символом. При этом увеличиваем на единицу переменную, хранящую количество символов, и, если текущий символ — это переход на новую строку, переменную для подсчета количества строк.

Для подсчета слов требуется определить в программе еще одну переменную, в которой будет хранится «сигнал», находимся ли мы внутри слова. Если это так, то очередной непробельный символ не следует считать началом нового слова и не надо увеличивать счетчик слов.

Алгоритм подсчета слов в программе выше следующий. Если текущий символ не пробел И не переход на новую строку, И ранее мы находились вне слова ( in_word == False ), то есть соблюдены все три условия сразу, значит началось новое слово. Поэтому увеличиваем счетчик слов и устанавливаем in_word в значение True . Последнее действие позволит на следующей итерации цикла, при условии обработки второй и послеющих букв слова, не соблюдаться условию in_word == False и не увеличивать счетчик слов.

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru