开发者

python read output

Write a program that outputs the first number within a file specified by the user. It should behave like:

Enter a 开发者_运维知识库file name: l11-1.txt

The first number is 20.

You will need to use the file object method .read(1) to read 1 character at a time, and a string object method to check if it is a number. If there is no number, the expected behaviour is:

Enter a file name: l11-2.txt

There is no number in l11-2.txt.

Why is reading 1 character at a time a better algorithm than calling .read() once and then processing the resulting string using a loop?

I have the files and it does correspond to the answers above but im not sure how to make it output properly.

The code i have so far is below:

    filenm = raw_input("Enter a file name: ")
    datain=file(filenm,"r")

try:
    c=datain.read(1)
    result = []
    while int(c) >= 0:
    result.append(c)
    c = datain.read(1)

except:
    pass
if len(result) > 0:
    print "The first number is",(" ".join(result))+" . "
else:
    print "There is no number in" , filenm + "."

so far this opens the file and reads it but the output is always no number even if there is one. Can anyone help me ?


OK, you've been given some instructions:

  • read a string input from the user
  • open the file given by that string
  • .read(1) a character at a time until you get the first number or EOF
  • print the number

You've got the first and second parts here (although you should use open instead of file to open a file), what next? The first thing to do is to work out your algorithm: what do you want the computer to do?


Your last line starts looping over the lines in the file, which sounds like not what your teacher wants -- they want you to read a single character. File objects have a .read() method that lets you specify how many bytes to read, so:

c = datain.read(1)

will read a single character into a string. You can then call .isdigit() on that to determine if it's a digit or not:

c.isdigit()

It sounds like you're supposed to keep reading a digit until you run out, and then concatenate them all together; if the first thing you read isn't a digit (c.isdigit() is False) you should just error out


Your datain variable is a file object. Use its .read(1) method to read 1 character at a time. Take a look at the string methods and find one that will tell you if a string is a number.


Why is reading 1 character at a time a better algorithm than calling .read() once and then processing the resulting string using a loop?

Define "better".

In this case, it's "better" because it makes you think.

In some cases, it's "better" because it can save reading an entire line when reading the first few bytes is enough.

In some cases, it's "better" because the entire line may not be sitting around in the input buffer.


You could use regex like (searching for an integer or a float):

import re
with open(filename, 'r') as fd:
  match = re.match('([-]?\d+(\.\d+|))', fd.read())
  if match:
    print 'My first number is', match.groups()[0]

This with with anything like: "Hello 111." => will output 111.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜