文件作为argparse的命令行参数-如果参数为空,则显示错误消息

问题描述 投票:0回答:1

我目前正在像这样使用argparse:

def is_valid_file(parser, arg):
if not os.path.exists(arg):
    parser.error("Tep tin %s khong ton tai!" % arg)
else:
    return open(arg, 'rb')   

def readinput():
parser = ArgumentParser(description="ikjMatrix multiplication")
parser.add_argument("-i", dest="filename", required=True,
                    help="File need predict", metavar="FILE",
                    type=lambda x: is_valid_file(parser, x))
args = parser.parse_args()
return args.filename.read()

我要检查文件是否为空?如果文件有效?我检查了一个有效文件,那么我想检查文件是否为空,我想得到一条错误消息。我怎样才能做到这一点?请帮我。非常感谢

python argparse
1个回答
0
投票

使用os.stat(在这里,通过Path对象访问)检查文件大小。

from argparse import ArgumentTypeError, ArgumentParser
from pathlib import Path


def NonEmptyFile(s):
    p = Path(s)
    if p.stat().st_size == 0:
        raise ArgumentTypeError(f'{s} cannot be empty')
    return p


def readinput():
    parser = ArgumentParser(description="ikjMatrix multiplication")
    parser.add_argument("-i", dest="filename", required=True,
                help="File need predict", metavar="FILE",
                type=NonEmptyFile)
    args = parser.parse_args()
    return p.read_text()   # Or read_bytes, as appropriate

为了避免出现竞争状况(有人可以清空文件[[after,您已确定文件不为空),请先从文件中读取,然后检查是否读取了任何内容。

def FileContents(s): try: with open(s) as f: data = f.read() # Decode, if desired except Exception as exc: raise ArgumentTypeError(f"Problem reading from {s}") from exc if len(data) == 0: raise ArgumentTypeError(f"{s} cannot be empty") return data def readinput(): parser = ArgumentParser(description="ikjMatrix multiplication") parser.add_argument("-i", dest="data", required=True, help="File need predict", metavar="FILE", type=FileContents) args = parser.parse_args() return p.data
© www.soinside.com 2019 - 2024. All rights reserved.