运行Python代码时,如何从命令行获取文件名?就像你的代码打开一个文件并读取该行一样,但是每当你运行它时文件都会有所不同,你怎么说:
python code.py input.txt
所以代码分析“input.txt”?你需要在实际的Python代码中做什么?我知道,这是一个非常模糊的问题,但我真的不知道如何更好地解释它。
答案 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)
答案 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 6。 official documentation有关于如何处理文件并将它们作为命令行参数传递的示例。
答案 7 :(得分:-2)
只需使用基本命令raw_input
将输入文件名声明为字符串
inFile = ""
inFile = raw_input("Enter the input File Name: ")
现在,您可以使用open(inFile,'w')