0

Is there a more pythonic way to write this code? this field_split variable becomes part of a mysql statement. I need to reformat these 5 time fields using dateutil.parser.parse and make the field None if the timestamp value was empty in the incoming CSV file that i parsed in to field_split. [6],[7],[8],[9],[44] are the columns that are timestamps is this table. I feel like there should be a way to consolidate this code more but not sure how.

                if field_split[6]:
                    field_split[6]= dateutil.parser.parse(field_split[6])
                else:
                    field_split[6]=None

                if field_split[7]:
                    field_split[7]= dateutil.parser.parse(field_split[7])
                else:
                    field_split[7] = None

                if field_split[8]:
                    field_split[8]= dateutil.parser.parse(field_split[8])
                else:
                    field_split[8] = None

                if field_split[9]:
                    field_split[9]= dateutil.parser.parse(field_split[9])
                else:
                    field_split[9] = None

                if field_split[44]:
                    field_split[44] = dateutil.parser.parse(field_split[44])
                else:
                    field_split[44] = None
personalt
  • 810
  • 3
  • 13
  • 26

2 Answers2

2

It feels like a loop would be appropriate here:

time_fields = [6,7,8,9,44]
for v in time_fields:
    if field_split[v]:
        field_split[v] = dateutil.parser.parse(field_split[v])
     else:
        field_split[v] = None

An other, more condensed, way of doing it...

set_ = field_split.__setitem__; parse_ = dateutil.parser.parse
[set_(i, parse_(field_split[i])) if field_split[i] else set_(i, None) for i in time_fields]
dtrckd
  • 657
  • 7
  • 17
1

Reuse field_split[timestamp] as data in the next if-else statement.

timestamps = [6, 7, 8, 9, 44]
for timestamp in timestamps:
    data = field_split[timestamp]
    field_split[timestamp] = dateutil.parser.parse(data) if data else None