我从来没有选过使用过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"
答案 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')])
我最初会避开那条路线但是......它的可读性要低得多!