打开文件并读取以找到数字的第一个实例。Python
我在做作业时遇到了一个问题,我需要写一个程序,打开我电脑上的一个文件,然后在这个文件里查找第一个出现的数字。一旦找到这个数字,它就会返回
文件名中的第一个数字是 x
如果没有找到数字,它就会说文件名中没有数字。
我到目前为止写的代码如下:当我运行它时,无论如何它总是说文件中没有数字 :(
filenm = raw_input("Enter a file name: ")
datain=open(filenm,"r")
try:
c=datain.read(1)
result = []
for line in datain:
c=datain.read(1)
while int(c) >= 0:
c = datain.read(1)
result.append(c)
except:
pass
if len(result) > 0:
print "The first number is",(" ".join(result))+" . "
else:
print "There is no number in" , filenm + "."
6 个回答
我的想法:
1) 正如其他人提到的,不要隐藏异常。让它抛出来会更好,至少这样你能知道出了什么问题,如果确实有问题的话。
2) 你确实想要一行一行地读取文件,使用 for line in file:
。这样做的原因是你想读取的数字基本上是“单词”(用空格分开的东西),而没有内置的方法可以一词一词地读取文件。 file.read(1)
只会读取一个字节(也就是一个字符,对于ASCII文件来说),然后你得自己把它们拼成单词,这样很麻烦。告诉Python把一行分成单词要简单得多。至少,我假设你不是要从“spam ham20eggs 10 lobster thermidor”中挑出“20”。
.readlines()
有点多余;它只是为了方便把文件中的行做成一个列表,但我们并不需要那个列表;我们只需要一行一行地读取。其实有一个叫 .xreadlines()
的函数可以做到这一点,但它已经不推荐使用了,因为我们可以直接用 for line in file:
。说真的,保持简单就好。
3) 在Python中,如果输入不是数字,int
不会返回负值,而是会抛出一个异常。你的代码没有正确处理这个异常,因为这会导致循环中断。没有办法告诉Python“从你抛出异常的地方继续”,而且也不应该有这样的方式,因为剩下的代码怎么能考虑发生了什么呢?
- 打开文件;
- 用循环一个一个字符地读取文件;
- 检查这个字符是不是数字,如果是,就打印你想要的内容;
- 如果读取到文件末尾还没找到数字,就打印“没有数字”。
可以使用 <string>.isdigit()
方法来检查给定的字符串(在你的情况下是单个字符)是否是数字。
这就是你所需要的全部内容:
import re
with open("filename") as f:
for line in f:
s=re.search(r'\d+',line)
if s:
print(s.group())
break