#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 .