2012-12-20 111 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

相关问题