Python «начинается с» не работает, когда строка является переменной, переданной функции - PullRequest
0 голосов
/ 01 мая 2018

В моей основной функции у меня есть кортеж, содержащий список поисковых значений. Я пытаюсь найти каждое из этих значений в массиве данных по одному. В моей основной функции я передаю массив данных (извлеченный из текстового файла) вместе с конкретным значением, которое нужно найти, в мою функцию поиска.

Ниже урезанная версия моего кода. .Startswith не может найти строку, когда она передается функции через «v». Если я вручную определяю строку, однако она работает без проблем. Я проверил строку несколькими способами, чтобы убедиться, что это строка, правильная длина, отсутствие пропущенных символов и т. Д., И не могу найти никаких проблем.

Есть идеи?

def find_ends(data, v):

    for line_no, line in enumerate(data):
        if line.startswith (v):
            start = line_no
    return start


def main():

    fr =open('filename', 'r')
    data = fr.readlines()
    fr.close

    arraynames = ["TOPOGRAPHY:", "XCOORD:"]

    for v in arraynames:
        start = find_ends(data, v)

    return

if __name__ == '__main__':
    main()

1 Ответ

0 голосов
/ 03 мая 2018

Спасибо за все полезные комментарии. Как обычно, код только начал работать, не знаю почему. Вот окончательный код, может быть, кто-то может определить, что произошло!

Данные выглядят как ниже. Скрипт ищет строку, содержащую ключевое слово и количество соответствующих строк / значений под ним. Затем скрипт определяет соответствующие начальную и конечную строки в файле / массиве, которые необходимо будет скопировать позже, и возвращает эту информацию в основную функцию.

TOPOGRAPHY: 25  
0.000
0.000
0.000
0.000
...
XCOORD: 25
0.000
2.500
5.0
...
...

def find_ends(data, v):

    for line_no, line in enumerate(data):
        if line.startswith (v):
            parts = line.split()
            start = line_no
            records = int(parts[1])
            end = line_no + records
    print(start, end, records)      
    return start, end, records

def main():

    fr = open('file', 'r')
    data = fr.readlines()
    fr.close

    arraynames = ["TOPOGRAPHY:", "XCOORD:"]

    for v in arraynames:
        start, end , records = find_ends(data, v)  
        print(start, end, records)  


if __name__ == '__main__':
    main()
...