代码之家  ›  专栏  ›  技术社区  ›  rmcsharry

Python csv阅读器中的行显示语法错误

  •  0
  • rmcsharry  · 技术社区  · 5 年前

    刚接触Django和Python。我需要为CSV文件编写一个导入脚本来为一些数据添加种子(不使用夹具,已经这样做了,因为它是基于JSON的,而不是CSV)。

    这起作用:

    import csv
    from datetime import datetime
    from django.utils.timezone import make_aware
    from django.core.management.base import BaseCommand
    from chatterbox.models import Organisation, Course, Student
    
    class Command(BaseCommand):
        def handle(self, **options):
    
          CSV_PATH = './students_AEKI.csv'
    
          Student.objects.filter(organisation__name__exact="AEKI").delete()
    
          with open(CSV_PATH) as file:
            file.readline() # skip the header
            csv_reader = csv.reader(file, delimiter=',')
            org = Organisation.objects.filter(name="AEKI")
    
            for row in csv_reader:
              _, Student.objects.get_or_create(
                  first_name=row[0],
                  last_name=row[1],
                  email=row[2],
                  organisation=org[0],
                  enrolled=row[4],
                  last_booking=row[5],
                  credits_total=row[6],
                  credits_balance=row[7],
                  )
    

    这不起作用:

    import csv
    from datetime import datetime
    from django.utils.timezone import make_aware
    from django.core.management.base import BaseCommand
    from chatterbox.models import Organisation, Course, Student
    
    class Command(BaseCommand):
        def handle(self, **options):
    
          CSV_PATH = './students_AEKI.csv'
    
          Student.objects.filter(organisation__name__exact="AEKI").delete()
    
          with open(CSV_PATH) as file:
            file.readline() # skip the header
            csv_reader = csv.reader(file, delimiter=',')
            org = Organisation.objects.filter(name="AEKI")
    
            for row in csv_reader:
              enrolled_utc = make_aware(datetime.strptime(row[4], '%Y-%m-%d'))
              last_booking_utc = make_aware(datetime.strptime((row[5], '%Y-%m-%d'))
              _, Student.objects.get_or_create(
                  first_name=row[0],
                  last_name=row[1],
                  email=row[2],
                  organisation=org[0],
                  enrolled=enrolled_utc,
                  last_booking=last_booking_utc,
                  credits_total=row[6],
                  credits_balance=row[7],
                  )
    

    “_”处存在语法错误。

    在表中创建数据之前,我需要对数据进行一些操作(例如在日期字段中添加时区)。那么,第二个版本有什么问题呢?

    1 回复  |  直到 5 年前
        1
  •  1
  •   rmcsharry    5 年前

    “_”处有语法错误。删除尾随字符。

    这行还有一个额外的括号:

    last_booking_utc = datetime.strptime((row[5], '%Y-%m-%d')
    

            for row in csv_reader:
              enrolled_utc = make_aware(datetime.strptime(row[4], '%Y-%m-%d'))
              last_booking_utc = make_aware(datetime.strptime((row[5], '%Y-%m-%d'))
              _, Student.objects.get_or_create(
                  first_name=row[0],
                  last_name=row[1],
                  email=row[2],
                  organisation=org[0],
                  enrolled=enrolled_utc,
                  last_booking=last_booking_utc,
                  credits_total=row[6],
                  credits_balance=row[7],
                  )
    

            for row in csv_reader:
                enrolled_utc = make_aware(datetime.strptime(row[4], '%Y-%m-%d'))
                last_booking_utc = make_aware(datetime.strptime(row[5], '%Y-%m-%d'))
                Student.objects.get_or_create(
                  first_name=row[0],
                  last_name=row[1],
                  email=row[2],
                  organisation=org[0],
                  enrolled=enrolled_utc,
                  last_booking=last_booking_utc,
                  credits_total=row[6],
                  credits_balance=row[7],
                  )