PYTHON从命令行获取文件

时间:2011-08-11 23:07:13

标签: python input command

运行Python代码时,如何从命令行获取文件名?就像你的代码打开一个文件并读取该行一样,但是每当你运行它时文件都会有所不同,你怎么说:

python code.py input.txt

所以代码分析“input.txt”?你需要在实际的Python代码中做什么?我知道,这是一个非常模糊的问题,但我真的不知道如何更好地解释它。

8 个答案:

答案 0 :(得分:41)

一个很好的选择是fileinput模块,它将从命令行中获取任何或所有文件名,并将指定文件的内容提供给您的脚本,就像它们是一个大文件一样。

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

更多信息here

答案 1 :(得分:28)

import sys
filename = sys.argv[-1]

这将获得命令行中的最后一个参数。如果没有传递参数,则它将是脚本名称本身,因为sys.argv[0]是正在运行的程序的名称。

答案 2 :(得分:15)

使用argparse非常直观:

import argparse
parser = argparse.ArgumentParser()                                               

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

现在该文件的名称位于:

args.file

你必须以不同的方式运行程序:

python code.py -f input.txt

答案 3 :(得分:9)

命令行参数可通过sys模块的argv列表以列表形式提供。列表中的第一个元素是程序的名称(sys.argv[0])。其余元素是命令行参数。

另请参阅getoptoptparseargparse模块以进行更复杂的命令行解析。

答案 4 :(得分:2)

如果您使用的是 Linux Windows PowerShell ,则可以在使用 cat 后,用管道“ |” 在input.txt文件上,假设您在可使用的同一目录中具有 input.txt 文件和 code.py 文件:

Public WithEvents myItems As Redemption.RDOItems 

MAPI_NO_CACHE = &H0200
PR_INTERNET_MESSAGE_ID = "http://schemas.microsoft.com/mapi/proptag/0x1035001F"

set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
set sentItemsFolder = Session.GetDefaultFolder(olFolderSentMail)
'reopen in the online mode
set items = Session.GetFolderFromID(sentItemsFolder.EntryID, , MAPI_NO_CACHE).Items

Private Sub myItems_ItemAdd(ByVal Item As Object)  
 MsgBox Item.Fields(PR_INTERNET_MESSAGE_ID)
End Sub

这将提供来自 STDIN 的python输入。例如:例如,如果您尝试从input.txt文件中获取名称

input.txt具有

$('.modal').on('shown.bs.modal', function () {
   $(this).css("opacity",1);
});

code.py有

cat input.txt | python code.py

会给

john,matthew,peter,albert

答案 5 :(得分:1)

我也喜欢argparse,它干净,简单,相当标准,提供免费的错误处理,并添加[-h]选项来帮助用户。

这里是不需要命名参数的版本,这对于一个非常简单的脚本可能很烦人:

#!/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) )

如何处理错误并为您提供帮助的示例:

> 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]

答案 6 :(得分:0)

除了现有答案中提到的内容之外,还有另一种选择依赖Command Line Interface Creation Kit (Click)的使用。我发布此答案时的最新稳定版本是version 6official documentation有关于如何处理文件并将它们作为命令行参数传递的示例。

答案 7 :(得分:-2)

只需使用基本命令raw_input

即可

将输入文件名声明为字符串

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

现在,您可以使用open(inFile,'w')

打开文件