我的目录树:
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上:
当然我可以python test_fileinput.py 1.txt 2.txt
,但我想知道有没有办法在Windows上传递 *.txt
?谢谢。
答案 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)