Skip to main content
 首页 » 编程设计

Python 2.7 使用 if elif 遍历文本文件

2025年05月04日9kevingrace

目标是编写一个脚本,该脚本将复制一个文本文件并排除任何以 # 开头的行。

我的问题是我似乎遇到了一个索引错误,该错误取决于我的 if elif 条件的顺序。非工作代码和工作代码之间的唯一区别(除了非工作函数名称的后缀“_bad”)是我首先测试“”条件(工作)与首先测试“#”条件(不工作)

基本文件由这个脚本创建:

>>> testFileObj = open("test.dat","w")   
>>> testFileObj.write("#line one\nline one\n#line two\nline two\n")   
>>> testFileObj.close() 

有效代码:

def copyAndWriteExcludingPoundSigns(origFile, origFileWithOutPounds):     
    origFileObj = open(origFile,"r")   
    modFileObj = open(origFileWithOutPounds,"w")   
    while True:   
        textObj = origFileObj.readline()     
        if textObj == "":     
            break     
        elif textObj[0] == "#":     
            continue     
        else:     
            modFileObj.write(textObj)     
    origFileObj.close()     
    modFileObj.close()     

无效的代码:

def copyAndWriteExcludingPoundSigns_Bad(origFile, origFileWithOutPounds):   
    origFileObj = open(origFile,"r")   
    modFileObj = open(origFileWithOutPounds,"w")   
    while True:   
        textObj = origFileObj.readline()   
        if textObj[0] == "#":   
            continue   
        elif textObj == "":   
            break   
        else:   
            modFileObj.write(textObj)   
    origFileObj.close()   
    modFileObj.close()   

这给了我这个错误:

Traceback (most recent call last): 
  File "<pyshell#96>", line 1, in <module> 
    copyAndWriteExcludingPoundSigns_Bad("test.dat","testOutput.dat") 
  File "<pyshell#94>", line 6, in copyAndWriteExcludingPoundSigns_Bad 
    if textObj[0] == "#": 
IndexError: string index out of range 

请您参考如下方法:

如果你这样做

if textObj[0] == "#":
和 textObj=""那么在零索引处没有字符,因为字符串是空的,因此索引错误。

另一种方法是

 if textObj.startswith("#"):
在这两种情况下都适用。