打开文件并读取以找到数字的第一个实例。Python

0 投票
6 回答
4502 浏览
提问于 2025-04-16 08:00

我在做作业时遇到了一个问题,我需要写一个程序,打开我电脑上的一个文件,然后在这个文件里查找第一个出现的数字。一旦找到这个数字,它就会返回

文件名中的第一个数字是 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 个回答

0

我的想法:

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“从你抛出异常的地方继续”,而且也不应该有这样的方式,因为剩下的代码怎么能考虑发生了什么呢?

1
  1. 打开文件;
  2. 用循环一个一个字符地读取文件;
  3. 检查这个字符是不是数字,如果是,就打印你想要的内容;
  4. 如果读取到文件末尾还没找到数字,就打印“没有数字”。

可以使用 <string>.isdigit() 方法来检查给定的字符串(在你的情况下是单个字符)是否是数字。

2

这就是你所需要的全部内容:

import re

with open("filename") as f:
    for line in f:
        s=re.search(r'\d+',line)
        if s:
            print(s.group())
            break

撰写回答