Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up

A Python library to sanitize/validate a string such as filenames/file-paths/etc.

License

NotificationsYou must be signed in to change notification settings

thombashi/pathvalidate

Repository files navigation

pathvalidate is a Python library to sanitize/validate a string such as filenames/file-paths/etc.

PyPI package versionconda package versionSupported Python versionsSupported Python implementationsCI status of Linux/macOS/WindowsTest coverage: coverallsCodeQL

  • Sanitize/Validate a string as a:
    • file name
    • file path
  • Sanitize will do:
    • Remove invalid characters for a target platform
    • Replace reserved names for a target platform
    • Normalize
    • Remove unprintable characters
  • Argument validator/sanitizer forargparse andclick
  • Multi platform support:
    • Linux
    • Windows
    • macOS
    • POSIX: POSIX-compliant systems (Linux, macOS, etc.)
    • universal: platform independent
  • Multibyte character support

You can find this package's command line interface tool at thepathvalidate-cli repository.

Sample Code:
frompathvalidateimportsanitize_filenamefname="fi:l*e/p\"a?t>h|.t<xt"print(f"{fname} ->{sanitize_filename(fname)}\n")fname="\0_a*b:c<d>e%f/(g)h+i_0.txt"print(f"{fname} ->{sanitize_filename(fname)}\n")
Output:
fi:l*e/p"a?t>h|.t<xt -> filepath.txt_a*b:c<d>e%f/(g)h+i_0.txt -> _abcde%f(g)h+i_0.txt

The default targetplatform isuniversal.i.e. the sanitized file name is valid for any platform.

Sample Code:
frompathvalidateimportsanitize_filepathfpath="fi:l*e/p\"a?t>h|.t<xt"print(f"{fpath} ->{sanitize_filepath(fpath)}\n")fpath="\0_a*b:c<d>e%f/(g)h+i_0.txt"print(f"{fpath} ->{sanitize_filepath(fpath)}\n")
Output:
fi:l*e/p"a?t>h|.t<xt -> file/path.txt_a*b:c<d>e%f/(g)h+i_0.txt -> _abcde%f/(g)h+i_0.txt
Sample Code:
importsysfrompathvalidateimportValidationError,validate_filenametry:validate_filename("fi:l*e/p\"a?t>h|.t<xt")exceptValidationErrorase:print(f"{e}\n",file=sys.stderr)try:validate_filename("COM1")exceptValidationErrorase:print(f"{e}\n",file=sys.stderr)
Output:
[PV1100] invalid characters found: platform=universal, description=invalids=('/'), value='fi:l*e/p"a?t>h|.t<xt'[PV1002] found a reserved name by a platform: 'COM1' is a reserved name, platform=universal, reusable_name=False
Sample Code:
frompathvalidateimportis_valid_filename,sanitize_filenamefname="fi:l*e/p\"a?t>h|.t<xt"print(f"is_valid_filename('{fname}') return{is_valid_filename(fname)}\n")sanitized_fname=sanitize_filename(fname)print(f"is_valid_filename('{sanitized_fname}') return{is_valid_filename(sanitized_fname)}\n")
Output:
is_valid_filename('fi:l*e/p"a?t>h|.t<xt') return Falseis_valid_filename('filepath.txt') return True
Sample Code:
fromargparseimportArgumentParserfrompathvalidate.argparseimportvalidate_filename_arg,validate_filepath_argparser=ArgumentParser()parser.add_argument("--filename",type=validate_filename_arg)parser.add_argument("--filepath",type=validate_filepath_arg)options=parser.parse_args()ifoptions.filename:print(f"filename:{options.filename}")ifoptions.filepath:print(f"filepath:{options.filepath}")
Output:
$ ./examples/argparse_validate.py --filename egfilename: eg$ ./examples/argparse_validate.py --filename e?gusage: argparse_validate.py [-h] [--filename FILENAME] [--filepath FILEPATH]argparse_validate.py: error: argument --filename: [PV1100] invalid characters found: invalids=(':'), value='e:g', platform=Windows

Note

validate_filepath_arg considerplatform as of"auto" if the input is an absolute file path.

Sample Code:
fromargparseimportArgumentParserfrompathvalidate.argparseimportsanitize_filename_arg,sanitize_filepath_argparser=ArgumentParser()parser.add_argument("--filename",type=sanitize_filename_arg)parser.add_argument("--filepath",type=sanitize_filepath_arg)options=parser.parse_args()ifoptions.filename:print("filename: {}".format(options.filename))ifoptions.filepath:print("filepath: {}".format(options.filepath))
Output:
$ ./examples/argparse_sanitize.py --filename e/gfilename: eg

Note

sanitize_filepath_arg is set platform as"auto".

Sample Code:
importclickfrompathvalidate.clickimportvalidate_filename_arg,validate_filepath_arg@click.command()@click.option("--filename",callback=validate_filename_arg)@click.option("--filepath",callback=validate_filepath_arg)defcli(filename:str,filepath:str)->None:iffilename:click.echo(f"filename:{filename}")iffilepath:click.echo(f"filepath:{filepath}")if__name__=="__main__":cli()
Output:
$ ./examples/click_validate.py --filename abfilename: ab$ ./examples/click_validate.py --filepath e?gUsage: click_validate.py [OPTIONS]Try 'click_validate.py --help' for help.Error: Invalid value for '--filename': [PV1100] invalid characters found: invalids=('?'), value='e?g', platform=Windows
Sample Code:
importclickfrompathvalidate.clickimportsanitize_filename_arg,sanitize_filepath_arg@click.command()@click.option("--filename",callback=sanitize_filename_arg)@click.option("--filepath",callback=sanitize_filepath_arg)defcli(filename,filepath):iffilename:click.echo(f"filename:{filename}")iffilepath:click.echo(f"filepath:{filepath}")if__name__=="__main__":cli()
Output:
$ ./examples/click_sanitize.py --filename a/bfilename: ab

More examples can be found athttps://pathvalidate.rtfd.io/en/latest/pages/examples/index.html

pip install pathvalidate
conda install conda-forge::pathvalidate
sudo add-apt-repository ppa:thombashi/ppasudo apt updatesudo apt install python3-pathvalidate

Python 3.9+no external dependencies.

https://pathvalidate.rtfd.io/

ex-sponsor: Charles Becker (chasbecker)ex-sponsor: 時雨堂 (shiguredo)onetime: Dmitry Belyaev (b4tman)onetime: Arturi0onetime: GitHub (github)

Become a sponsor


[8]ページ先頭

©2009-2025 Movatter.jp