Python中相当于Perl的(<>)是什么?fileinput无法正常工作
在Perl中,你可以这样做:
while (<>) {
# process files given as command line arguments
}
在Python中,我发现了:
import fileinput
for line in fileinput.input():
process(line)
但是,当命令行中给出的文件不存在时,会发生什么呢?
比如说,命令是 python test.py test1.txt test2.txt filenotexist1.txt filenotexist2.txt test3.txt
。
我尝试了各种方法来使用 try: except: nextfile
,但似乎都没有成功。
对于上面的命令,脚本应该能处理 test1-3.txt
,但是当文件找不到时,它应该默默地跳到下一个文件。
Perl在这方面做得很好。我在网上搜索了很久,但找不到这个问题的答案。
7 个回答
3
像这样;
import sys
for f in sys.argv[1:]:
try:
data = open(f).readlines()
process(data)
except IOError:
continue
3
把@Brian的回答改成一个生成器,并且捕捉IOError
错误,而不是检查文件是否存在,这样更符合Python的风格,然后在失败时向标准错误输出一个警告:
import sys
def read_files(files = None):
if not files:
files = sys.argv[1:]
for file in files:
try:
for line in open(file):
yield line
except IOError, e:
print >>sys.stderr, 'Warning:', e
for line in read_files():
print line,
输出(文件baz
不存在):
$ python read_lines.py foo bar baz
line 1 of foo
line 2 of foo
line 1 of bar
line 2 of bar
Warning: [Errno 2] No such file or directory: 'baz'
你可能想花点时间整理一下错误信息,但这可能不太值得。
5
import sys
import os
for f in sys.argv[1:]:
if os.path.exists(f):
for line in open(f).readlines():
process(line)
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。