2012-12-20 114 views
1

我想要獲取文件夾中每個文件的行數,並打印出與文件名相鄰的行數。剛進入編程世界時,我設法編寫了這個簡短的代碼,並從各處借用它們。在多個文件中輸入多行文件並輸出文件名

#count the number of lines in all files and output both count number and file name 
import glob 
list_of_files = glob.glob('./*.linear') 
for file_name in list_of_files: 
    with open (file_name) as f, open ('countfile' , 'w') as out : 
     count = sum (1 for line in f) 
     print >> out, count, f.name 

但是,這給出了只有一個文件的輸出。

這可以很容易地使用wc -l * .linear在shell中完成,但我想知道如何在python中做到這一點。

P.S:我真心希望我不會重複提問!

+0

這是因爲您每次迭代都會一次又一次地截斷countfile。 –

回答

4

你真的很接近!只要打開countfile一次,而不是在循環中:

import glob 
with open('countfile' , 'w') as out: 
    list_of_files = glob.glob('./*.linear') 
    for file_name in list_of_files: 
     with open(file_name, 'r') as f: 
      count = sum(1 for line in f) 
      out.write('{c} {f}\n'.format(c = count, f = file_name)) 

每一個文件在w模式,(例如open('countfile', 'w'))開通時間,countfile(如果它已經存在)中的內容被刪除。這就是爲什麼你只需要調用一次。

+0

替換'print >> ...'東西的榮譽。我從來不喜歡那種'print'的形式。它似乎不適合其餘的python語法。 – mgilson

+0

@mgilson:是的,我從不使用'print out >>'。 'print'是Python3中的一個函數,所以現在使用它幾乎沒有意義。 :) – unutbu

+0

它與'file.write'稍有不同。它隱式地調用傳遞給它的項目上的'str',並自動附加一個換行符(當然,除非你有一個尾隨逗號)。也就是說,我寧願使用字符串格式或插值。 – mgilson

相關問題