python: използване на файлов манипулатор за отпечатване на съдържанието на файла

Следвам този съвет: Файл като аргумент на командния ред за argparse - съобщение за грешка, ако аргументът не е валиден за отпечатване на съдържанието на файл. Ето MWE:

import argparse
import os


def is_valid_file(parser, arg):
    """

    :rtype : open file handle
    """
    if not os.path.exists(arg):
        parser.error("The file %s does not exist!" % arg)
    else:
        return open(arg, 'r')  # return an open file handle


parser = argparse.ArgumentParser(description='do shit')
parser.add_argument("-i", dest="filename", required=True,
                    help="input file with two matrices", metavar="FILE",
                    type=lambda x: is_valid_file(parser, x))

args = parser.parse_args()

print(args.filename.read)

Получавам обаче това вместо съдържанието на файла:

<built-in method read of _io.TextIOWrapper object at 0x7f1988b3bb40>

какво правя грешно


person Zubo    schedule 15.12.2014    source източник


Отговори (1)


замени това:

print(args.filename.read)

to:

print(args.filename.read())

Прочетете за класа и обекта тук: Клас и обект

person Hackaholic    schedule 15.12.2014
comment
@Zubo Това се дължи на начина, по който функциите на python са първокласни обекти. Като напишете filename.read получавате обект. Знаците () извикват обекта. Бележка 2_ - person Nick Humrich; 16.12.2014