我有三个功能,readHeader
读取txt文件的标题,readExpertsFile
读取文件的内容,以及exceptionNH
函数比较文件名和标头,如果两者不兼容(例如,名称中的日期与标头不同),则会引发异常。
这是三个函数和一个txt示例:
def readHeader(fileName):
fileIn = open(fileName, "r")
fileIn.readline()
day = fileIn.readline().replace("\n", "")
fileIn.readline()
time = fileIn.readline().replace("\n", "")
fileIn.readline()
company = fileIn.readline().replace("\n", "")
scope = fileIn.readline().replace(":", "").replace("\n", "")
fileIn.close()
return (day, time, company, scope)
def readFile(fileName):
expertsList = []
expertsList.append(readHeader(fileName))
fileIn = open(fileName, "r")
for line_counter in range(LNHEADER):
fileIn.readline()
fileInE.close()
return expertsList
def exceptionNH(fileName):
try:
assert fileName[10:17] == readFile(fileName)[3][0].lower().replace(":", "")
except AssertionError:
print("Error in input file: inconsistent name and header in file", fileName,".")
exit()
fileName = "file.txt"
exceptionNH("2018y03m28experts10h30.txt")
2018y03m28experts10h30.txt:
Day:
2018-03-28
Time:
10:30
Company:
XXX
Experts:
...
...
我的问题是,在try语句上,我希望断言将比较视为“ True
”,并跳过except子句,但这没有发生。
我怀疑.lower()
无法正常工作,但我不明白为什么。
如果您看到其他更好的东西,可以随时分享,因为我是python的新手,并且想提高自己。
答案 0 :(得分:0)
我发现了错误。我在想,当我想从列表中的第一个元组中获取第一个元素时,我需要写list[position of item][position of tuple]
,而不是相反的。
按照mkrieger1的建议,我打印了fileName[10:17]
和readFile(fileName)[3][0].lower().replace(":", "")
,第一个是好的,但是第二个没有显示第一个元组的第三项(来自readHeader
),但是第三元组的第一项。
我已经从readFile(fileName)[3][0].lower().replace(":", "")
更改为readFile(fileName)[0][3].lower().replace(":", "")
,并且现在可以使用了,谢谢您的帮助。