Почему мой список возвращается пустым при чтении файла?

#python #list #file #if-statement

#python #Список #файл #if-оператор

Вопрос:

Я работаю над проектом, который считывает файл, в котором начальные строки в каждом файле имеют букву, которая представляет, что делает эта строка. Например, если строка начинается с ‘p’, то эта строка содержит координату.

Я пытаюсь добавить все строки, начинающиеся с p, в их собственный список. Затем преобразуйте координаты в кортежи. Это код, который я запускаю для этого:

 pList=[]
if [0] in makeList is 'p':
    pList=[tuple(map(int, l.split()[2:3])) for l in makeList.readlines()]
    pList.append(line.strip())
 

Моя проблема в том, что когда я запускаю диагностическую печать, список возвращается пустым. Я новичок в программировании, поэтому мне трудно устранить проблему с этим. Спасибо!

Комментарии:

1. Советы по устранению неполадок — сократите if оператор до одного условия и замените условный код print("condition met") оператором, чтобы увидеть, выполнено ли оно. Если нет, выясните, почему, если да — добавьте еще одно утверждение и посмотрите, сработало ли оно. Повторяйте, пока не исправлено.

Ответ №1:

Ваша цепочка сравнения соединений (спасибо @KellyBundy) никогда не выполняется:

 if [0] in makeList .... :    --> True or False 

if makeList is 'p':`  --> False
 

Вы используете makeList.readlines() предположение, что makeList это ваш файловый дескриптор, что делает ваше условие более бессмысленным.

Обычно вы делаете что-то вроде:

 with open(filename) as f:
    for line in f:
        if line[0] == 'p': # or line.startswith(...) - do not compare with IS
            # split line, convert to int, make tuple, add to list
 

Комментарии:

1. @Kelly спасибо, исправлено

2. Может быть не совсем понятно для тех, кто этого еще не знает, но я думаю, что по ссылке они могут это понять. В любом случае, да, одно из двух сравнений будет ложным, независимо makeList от того, что это такое.

3. Глупая маленькая задача: узнайте, как сделать [0] in makeList and makeList is 'p' true .