如何循环遍历多个文件,忽略空文件而不引发异常?

时间:2016-04-03 02:53:07

标签: file loops try-catch except

我正在编写一个可以同时接受多个文件的程序。但我尝试更改此程序,如果输入一个空文件,然后忽略该文件,但继续读取所有其他文件,并提供输出,而不会引发任何与空相关的异常错误文件。

例如:

文件1 =包含可与该程序一起使用的文本

文件2 =为空

这是我的计划的一部分:

from sys import argv
script , filenames = argv[0], argv[1:]

for file in filenames: 
    with open(file) as f: 

        var  = f.read()          

        print "\n\nYou File Name: '(%r)'" % (file)

        var1 = var.split() 
        var2 = len(var1) 

        print '\n\nThe Total Number of Words: "({0:,})"'.format(var2) 

        var3 = var.split()[0]
        var4 = len(var3) 

        print '\n\nThe First Word and Length: "(%s)" ({0:,})'.format(var4)  % (var3)

如果我使用文件2运行此程序,我将收到以下错误:

    var3 = var.split()[0]
IndexError: list index out of range

是否有一种方法可以让我一起运行文件1和文件2,但获取文件1的输出,然后为文件2打印一条消息,说它是一个无法识别的文件?我尝试添加try / except但仍然无法正常工作。

1 个答案:

答案 0 :(得分:1)

使用if / else检查文件的长度:

for file in filenames: 
    with open(file) as f: 

        var = f.read()          

        print "\n\nYou File Name: '(%r)'" % (file)

        if len(var) > 0:
            var1 = var.split() 
            var2 = len(var1) 

            print '\n\nThe Total Number of Words: "({0:,})"'.format(var2) 

            var3 = var.split()[0]
            var4 = len(var3) 

            print '\n\nThe First Word and Length: "(%s)" ({0:,})'.format(var4)  % (var3)
         else:
            print 'File empty'