Python,检查某些行的​​数据文件

时间:2011-02-04 02:17:50

标签: python counter readline

我从来没有选过使用过python的类,只有c,c ++,c#,java等。 这应该很容易,但我觉得我错过了一些巨大的python反应。 我正在做的就是读取一个文件,检查只有数字的行,计算这样的行数并显示它。

所以我打开,阅读,条带化,检查isdigit()和递增。怎么了?

# variables
sum = 0
switch = "run"

print( "Reading data.txt and counting..." )

# open the file
file = open( 'data.txt', 'r' )

# run through file, stripping lines and checking for numerics, incrementing sum when neeeded
while ( switch == "run" ):
    line = file.readline()
    line = line.strip()

    if ( line.isdigit() ):
        sum += 1

    if ( line == "" ):
        print( "End of file\ndata.txt contains %s lines of digits" %(sum) )
        switch = "stop"

5 个答案:

答案 0 :(得分:4)

Python中告诉你是否到达文件末尾的正确方法是以查看它是否返回空行。

相反,迭代文件中的所有行,循环将在文件末尾到达时结束。

num_digits = 0
with open("data.txt") as f:
    for line in f:
        if line.strip().isdigit():
            num_digits += 1

因为可以迭代文件,所以可以使用生成器表达式简化:

with open("data.txt") as f:
   num_digits = sum( 1 for line in f if line.strip().isdigit() )

我还建议不要使用sum之类的保留Python关键字作为变量名,而且对于像你一样使用流逻辑的字符串比较也是非常低效的。

答案 1 :(得分:2)

sum=0
f=open("file")
for line in f:
    if line.strip().isdigit():
         sum+=1
f.close()  

答案 2 :(得分:0)

你是如何运行该程序的?你确定data.txt有数据吗?文件中是否有空行?

试试这个:

while 1:
    line = file.readline()
    if not line: break
    line = line.strip()

    if ( line.isdigit() ):
        sum += 1


print( "End of file\ndata.txt contains %s lines of digits" %(sum) )

答案 3 :(得分:0)

我刚试过运行你的代码:

matti@konata:~/tmp$ cat data.txt 
1
a
542
dfd
b
42
matti@konata:~/tmp$ python johnredyns.py 
Reading data.txt and counting...
End of file
data.txt contains 3 lines of digits

这里工作正常。你的data.txt中有什么?

答案 4 :(得分:0)

正如几位人士所说,您的代码似乎完美无缺。也许您的“data.txt”文件与当前工作目录不同(不一定是脚本所在的目录)?

然而,这是一种更加“pythonic”的方式来做同样的事情:

counter = 0
with open('data.txt', 'r') as infile:
    for line in infile:
        if line.strip().isdigit():
            counter += 1
print 'There are a total of {0} lines that start with digits'.format(counter)

你甚至可以用:

制作一个单行班
counter = sum([line.strip().isdigit() for line in open('data.txt', 'r')])

我最初会避开那条路线但是......它的可读性要低得多!