目标是编写一个脚本,该脚本将复制一个文本文件并排除任何以 # 开头的行。
我的问题是我似乎遇到了一个索引错误,该错误取决于我的 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("#"):在这两种情况下都适用。
