在Python中从命令行参数获取文件路径

26

请问有人能指导我如何通过命令行参数获取文件路径并提取文件吗?如果需要检查文件是否存在于特定目录中,该怎么办?

python.py /home/abhishek/test.txt

获取文件路径并检查test.txt是否存在于abhishek文件夹中。

我知道这可能很简单,但我对Python还有点陌生。


在遇到我知道脚本有效且文件存在的问题后,以下是一些提示。如果终端中的当前目录为 dir1,并且您正在尝试运行位于 dir2 中的脚本,并且您正在为脚本 dir3 传递相对路径参数,例如 python3 dir2/myscript.py dir3,那么:dir3 应该相对于当前目录 dir1 而不是相对于脚本所在的目录 dir2 - nakakapagpabagabag
4个回答

33
import os
import sys

fn = sys.argv[1]
if os.path.exists(fn):
    print os.path.basename(fn)
    # file exists

感谢提供输入。只想补充一件事。我们能否在不使用sys.argv[1]的情况下获取文件名。根据现有框架,他们建议我不要使用sys.argv。 - user765443
1
@user765443 - 是的,你可以看一下argparse模块。 - eumiro

14

从Python 3.4开始,您可以将argparsepathlib一起使用:

import argparse
from pathlib import Path

parser = argparse.ArgumentParser()
parser.add_argument("file_path", type=Path)

p = parser.parse_args()
print(p.file_path, type(p.file_path), p.file_path.exists())

11

我认为最优雅的方法是使用ArgumentParser。这样,您甚至可以获得-h选项,帮助用户弄清如何传递参数。我还包括了一个可选参数(--outputDirectory)。

现在,您可以通过执行以下命令来简单地执行:python3 test.py /home/test.txt --outputDirectory /home/testDir/

import argparse
import sys
import os

def create_arg_parser():
    # Creates and returns the ArgumentParser object

    parser = argparse.ArgumentParser(description='Description of your app.')
    parser.add_argument('inputDirectory',
                    help='Path to the input directory.')
    parser.add_argument('--outputDirectory',
                    help='Path to the output that contains the resumes.')
    return parser


if __name__ == "__main__":
    arg_parser = create_arg_parser()
    parsed_args = arg_parser.parse_args(sys.argv[1:])
    if os.path.exists(parsed_args.inputDirectory):
       print("File exist")

4
请使用以下内容:
import sys
import os

path = sys.argv[1]

# Check if path exits
if os.path.exists(path):
    print "File exist"

# Get filename
print "filename : " + path.split("/")[-1]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接