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



我目前正在像这样使用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()

我想检查文件是否为空?文件是否有效?我检查了一个有效的文件,然后我想检查该文件是否为空,我想收到错误消息。我该怎么做?请帮助我。多谢

使用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

为了避免争用条件(在您确定文件不为空后,有人可能会清空文件(,请先从文件中读取,然后检查您是否读取了任何内容。

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

最新更新