PYTHON get files from command line

前端 未结 8 490
夕颜
夕颜 2020-12-04 18:04

How do you get a file name from command line when you run a Python code? Like if your code opens a file and reads the line, but the file varies whenever you run it, how to y

相关标签:
8条回答
  • 2020-12-04 18:09
    import sys
    filename = sys.argv[-1]
    

    This will get the last argument on the command line. If no arguments are passed, it will be the script name itself, as sys.argv[0] is the name of the running program.

    0 讨论(0)
  • 2020-12-04 18:12

    I also like argparse, it's clean, simple, fairly standard, gives free error handling, and add a [-h] option to help the user.

    Here is a version that do not need the named parameters, which may be annoying for a very simple script:

    #!/usr/bin/python3
    
    import argparse
    
    arg_parser = argparse.ArgumentParser( description = "Copy source_file as target_file." )
    arg_parser.add_argument( "source_file" )
    arg_parser.add_argument( "target_file" )
    arguments = arg_parser.parse_args()
    
    source = arguments.source_file
    target = arguments.target_file
    print( "Copying [{}] to [{}]".format(source, target) )
    

    Example of how it handles errors and help for you:

    >my_test.py

    usage: my_test.py [-h] source_file target_file
    my_test.py: error: the following arguments are required: source_file, target_file
    

    >my_test.py my_source.cpp

    usage: my_test.py [-h] source_file target_file
    my_test.py: error: the following arguments are required: target_file
    

    >my_test.py -h

    usage: .py [-h] source_file target_file
    
    Copy source_file as target_file.
    
    positional arguments:
      source_file
      target_file
    
    optional arguments:
      -h, --help   show this help message and exit
    

    >my_test.py my_source.cpp my_target.cpp

    Copying [my_source.cpp] to [my_target.cpp]
    
    0 讨论(0)
  • 2020-12-04 18:13

    Using argparse is quite intuitive:

    import argparse
    parser = argparse.ArgumentParser()                                               
    
    parser.add_argument("--file", "-f", type=str, required=True)
    args = parser.parse_args()
    

    Now the name of the file is located in:

    args.file
    

    You just have to run the program a little differently:

    python code.py -f input.txt
    
    0 讨论(0)
  • 2020-12-04 18:17

    If you're using Linux or Windows PowerShell you could pipe " | " it after using cat on input.txt file, suppose you have input.txt file and your code.py file in same directory you could use:

    cat input.txt | python code.py
    

    This will provide python input from STDIN. for example: if for example you're trying get names from input.txt file

    input.txt has

    john,matthew,peter,albert
    

    code.py has

    print(" is not ".join(input().rstrip().split(',')))
    

    would give

    john is not matthew is not peter is not albert
    
    0 讨论(0)
  • 2020-12-04 18:19

    A great option is the fileinput module, which will grab any or all filenames from the command line, and give the specified files' contents to your script as though they were one big file.

    import fileinput
    for line in fileinput.input():
        process(line)
    

    More information here.

    0 讨论(0)
  • 2020-12-04 18:25

    Just use the basic command raw_input

    declare input file name as string

    inFile = ""
    inFile = raw_input("Enter the input File Name: ")
    

    Now you can open the file by using with open(inFile,'w')

    0 讨论(0)
提交回复
热议问题