如何在windows cmd中传递像* .txt这样的通配符参数

时间:2014-02-12 14:43:20

标签: python windows

我的目录树:

test/
|_____ 1.txt   content: 1_line1\n1_line2
|_____ 2.txt   content: 2_line1\n2_line2
|_____ test_fileinput.py

我的Python脚本:

import fileinput
import sys

for line in fileinput.input(sys.argv[1:]):
     print(fileinput.filename(), fileinput.filelineno(), line)

首先我在Linux上尝试过,因为你看它完美无缺:

$ python3 test_fileinput.py *.txt
1.txt 1 1_line1

1.txt 2 1_line2
2.txt 1 2_line1

2.txt 2 2_line2

但在Windows上:

enter image description here

当然我可以python test_fileinput.py 1.txt 2.txt,但我想知道有没有办法在Windows上传递 *.txt ?谢谢。

1 个答案:

答案 0 :(得分:5)

您可以使用glob模块,该模块提供与平台无关的通配符匹配方式。例如,glob('*.txt')将返回当前目录中所有txt文件的列表。

import fileinput
import sys
from glob import glob

for line in fileinput.input(glob(sys.argv[1]):
     print(fileinput.filename(), fileinput.filelineno(), line)

如果您想保留可以指定多个输入的行为(以便python test_fileinput.py *.txt *.csv other.md执行有效行为),您可以修改以下代码:

import fileinput
import sys
from glob import glob

all_files = [f for files in sys.argv[1:] for f in glob(files)]

for line in fileinput.input(all_files):
     print(fileinput.filename(), fileinput.filelineno(), line)