Python возвращает ошибку синтаксиса при попытке ссылаться на файл CSV

#python #python-3.x

#питон #python-3.x #python

Вопрос:

Итак, у меня есть задание CS, которое мне нужно выполнить, и одна синтаксическая ошибка мешает мне двигаться дальше.

Я хочу распечатать строки в формате CSV, которые имеют значение Y во втором столбце, и если они есть, возьмите значение первого столбца и поместите его в словарь. Прямо сейчас я хочу заставить его просто распечатать словарь.

Однако я понятия не имею, почему, но это выдает мне ошибку синтаксиса.

Это то, что у меня есть до сих пор:

 import csv
d = {}
#Scan mandatory categories
with open('MandatoryFlags.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    line_count = 0
    for row in csv_reader:
        if line_count == 0:
            line_count  = 1
        else:
            if str(row[1]) = "Y":
                d["MCat{0}".format(line_count)] = row[0]
            else:
                continue
            line_count  = 1
print(d)
  

Я не имею ни малейшего понятия, почему, но это возвращается:

   File "C:/Users/Assoufi/PycharmProjects/ComputerScience/CSAssignment4.py", line 12
    if str(row[1]) = "Y":
                   ^
SyntaxError: invalid syntax
  

Могу я получить какую-нибудь помощь?

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

1. Нет необходимости отвечать на это, ребята, голосуйте за закрытие простых опечаток

2. Я действительно не знал. Я постараюсь изо всех сил не совершать этих ошибок @Chris_Rands .

Ответ №1:

Вы, вероятно, имели в виду if str(row[1]) == "Y": .

Сравнение в Python выполняется с двойным равенством ( == ).

Если я могу вмешаться, ваш код было бы намного лучше использовать enumerate() вот так:

 d = {}

with open('MandatoryFlags.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    iterator = enumerate(csv_reader)
    next(iterator)  # Skip first line
    for line_count, row in iterator:
        if str(row[1]) == "Y":
            d["MCat{0}".format(line_count)] = row[0]
  

Или даже короче:

 with open('MandatoryFlags.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    iterator = enumerate(csv_reader)
    next(iterator)  # Skip first line
    d = {f"MCat{n}": row[0] for n, row in iterator if str(row[1]) == "Y"}
  

Ответ №2:

Похоже, проблема в том, что вы использовали один знак равенства вместо двух в

 if str(row[1]) = "Y":
  

Сравнение в Python выполняется с двумя знаками равенства:

 import csv
d = {}
#Scan mandatory categories
with open('MandatoryFlags.csv') as csv_file:
    csv_reader = csv.reader(csv_file, delimiter=',')
    line_count = 0
    for row in csv_reader:
        if line_count == 0:
            line_count  = 1
        else:
            if str(row[1]) == "Y":
                d["MCat{0}".format(line_count)] = row[0]
            else:
                continue
            line_count  = 1
print(d)
  

Ответ №3:

Я попробую разобраться с самой очевидной проблемой. Оператор if требует наличия двух знаков равенства.

Вместо: if str(row[1]) = "Y":

Попробуй это: if str(row[1]) == "Y":

Примечание: я не просматривал остальную часть кода… просто устраняю синтаксическую ошибку. Удачи!