15

我正在编写样板来处理稍后将传递给另一个函数的命令行参数。这个其他函数将处理所有目录创建(如果需要)。因此,我的 bp 只需要检查输入字符串是否可以是有效目录、有效文件或(其他东西)。它需要区分诸如“c:/users/username/”和“c:/users/username/img.jpg”之类的东西

def check_names(infile):
    #this will not work, because infile might not exist yet
    import os
    if os.path.isdir(infile):
        <do stuff>
    elif os.path.isfile(infile):
        <do stuff>
    ...

标准库似乎没有提供任何解决方案,但理想的情况是:

def check_names(infile):
    if os.path.has_valid_dir_syntax(infile):
        <do stuff>
    elif os.path.has_valid_file_syntax(infile):
        <do stuff>
    ...

在输入时考虑问题后,我无法理解一种方法来检查(仅基于语法)字符串是否包含文件扩展名和斜杠以外的文件或目录(两者可能都不存在) . 可能刚刚回答了我自己的问题,但如果有人对我的胡言乱语有想法,请发帖。谢谢!

4

3 回答 3

10

我不知道您使用的是什么操作系统,但问题在于,至少在 Unix 上,您可以拥有没有扩展名的文件。所以~/foo可以是文件或目录。

我认为你能得到的最接近的是:

def check_names(path):
    if not os.path.exists(os.path.dirname(path)):
        os.makedirs(os.path.dirname(path))
于 2013-07-09T21:14:33.563 回答
3

除非我理解错了,os.path确实有你需要的工具。

def check_names(infile):
    if os.path.isdir(infile):
        <do stuff>
    elif os.path.exists(infile):
        <do stuff>
    ...

这些函数将路径作为字符串接收,我相信这就是您想要的。见os.path.isdiros.path.exists


是的,我确实误会了。看看这个帖子

于 2013-07-09T21:07:38.017 回答
1

自 Python 3.4 以来的新功能,您还可以使用pathlib模块:

def check_names(infile):
    from pathlib import Path
    if Path(infile).exists():       # This determines if the string input is a valid path
        if Path(infile).is_dir():
            <do stuff>
        elif Path(infile).is_file():
            <do stuff>
    ...
于 2020-08-26T17:42:14.287 回答