Попробуйте оператор не работает, как я ожидаю - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть три функции, readHeader thet читает заголовок txt-файла, readExpertsFile, который читает содержимое файла, и exceptionNH функция, которая сравнивает имя файла и заголовок и вызывает исключение, еслиони несовместимы (например, если дата в имени не совпадает с заголовком).
Вот три функции и пример текста:

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 я ожидаю, что assert «видит» сравнение как True и пропускает предложение кроме, но этого не происходит.
Я подозреваю, что .lower()не работает, но я не могу понять, почему.
Если вы видите другие вещи, которыми можно поделиться, не стесняйтесь делиться, так как я новичок в Python и хочу улучшить себя.

1 Ответ

0 голосов
/ 09 декабря 2018

Я нашел ошибку.Я думал, что когда я хочу получить первый элемент из первого кортежа в списке, мне нужно будет написать 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(":", "") и теперь он работает, спасибо за помощь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...