2013-07-22 71 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)