2013-07-22 7 views
0

Я пытаюсь создать код Python, который будет подсчитывать количество строк в текстовом файле. Однако он не будет распознавать оператор for, поскольку он дает мне ошибки в отступе ниже.Подсчет строк из текстового файла

#*********************end of sec 1***************************** 
item=open("back.txt","r") 
i=0 
countlist=[line.strip() for line in item]#seperate lines 
     i=1+i 
print i 
item.close() 
+0

Является ли линия i = 1 + i такой отступ? –

ответ

1

Попробуйте это,

with open("back.txt", "r") as backfile: 
    lines = backfile.readlines() 
    return len(lines) 
+0

Я думал, что OP не хочет строк. Неважно. –

+0

Ok, thatz fine, cool :) – Karthikeyan

2
print len(list(open("some_file.txt"))) 

нет необходимости with ... или закрытия файлов ... это обыкновение держать ссылку на ФХ, так что надо собирать мусор и уничтожать просто отлично

+0

Работает только на CPython, и он считывает весь файл в память сразу. – user2357112

+0

Вы можете 'для строки в строках' после открытия файла, но затем вы пишете цикл вручную, даже если вы не загружаете весь файл в память сразу ... компромиссы для всего. – jheld

0

Вложения заключены в скобки, а i = 1 + i не входит в область цикла for. Следовательно, i = 1 + 1 не следует отступать.

1
with open("back.txt") as f: 
    print len(f.readlines()) 
1

попробовать это:

for line in item: 
    i=i+1 
1
with open('back.txt', 'r') as item: 
    nbr = sum(1 for i in item) 

выражение генератора, который не должен держать гораздо ненужный в памяти.

0

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

with open(filename) as f: 
    rowcount = sum(1 for line in f) 

Это закрывает файл, когда вы закончите, даже на реализации Python, кроме CPython, и он не хранит в памяти весь файл, поэтому он работает с огромными файлами. Если вам нужен фактический список строк, вы хотите:

with open(filename) as f: 
    rows = [line.strip() for line in f] 
rowcount = len(rows)