通过命令行使用*在python中输入多个文件

时间:2015-01-15 02:02:13

标签: python

我正在尝试创建一个python脚本,它可以通过命令行接收多个文件作为输入。

现在我正在使用一个使用一个文件作为输入的方法:

我现在使用:python function_name.py input_file.txt

调用该函数

使用如下代码:

import sys
def function_name(): 
    input = sys.argv[1]
    with open(input,'r') as afile:
        read_data = afile.read()
if __name__ == '__main__':
    function_name()

但是如何将当前目录中的所有.txt文件用作输入?

即:python function_name.py *.txt 或者:python function_name.py ./*/*.txt

我想对每个输入文件执行相同的操作。

2 个答案:

答案 0 :(得分:3)

sys.argv是传递给脚本的参数列表。第一个是脚本的名称(scriptname.py),其余的将是你输入的任何内容。

如果您运行python function_name.py *.txt,这将由shell扩展为python function_name.py 1.txt 2.txt blah.txt wibble.com.exe.extension.txt(或此目录中的任何文件名。

所以,我会做这样的事情:

 def function_name(): 
      for filename in sys.argv[1:]:
          print "You specified %s on the commandline - do something with it here!" % filename

[1:]部分表示忽略索引1之前的任何参数(即从第二个开始),或者您将处理您的python脚本!

根据经验,我可能会将此作为参数传递给函数,所以:

import sys
def function_name(filestoprocess): 
    for input in filestoprocess:
        print "Processing %s" % input
        with open(input,'r') as afile:
            read_data = afile.read()
if __name__ == '__main__':
    function_name(sys.argv[1:])

答案 1 :(得分:1)

您可能想查看glob模块。您可以将命令行输入glob.glob,它会为您提供与您发送的通配符匹配的文件列表。然后您可以根据需要处理它们