2013-07-22 101 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

好吧,那很好,很酷:) – Karthikeyan

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

不需要with ...或关闭文件......这不会参考保持到FH所以应该垃圾收集和销毁就好

+0

只适用于CPython,它会一次将整个文件读入内存。 – user2357112

+0

打开文件后,你可以用'换行'的方式,但是然后你手工编写一个循环,即使你没有把整个文件一次加载到内存中......所有的权衡。 – jheld

0

for被封装在括号中,并且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) 

这将关闭文件时,即可大功告成,甚至比CPython的其他Python实现,它不会将整个文件存储在内存中,所以它适用于大文件。如果你需要一个实际的行列表,你需要这个:

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