- csvReader.next()
- for i, row in enumerate(csvReader):
- yield str(i), row[0], row[1]
+
+ header = csvReader.next()
+ nameColumn, phoneColumns = cls._guess_columns(header)
+
+ yieldCount = 0
+ for row in csvReader:
+ contactDetails = []
+ for (phoneType, phoneColumn) in phoneColumns:
+ try:
+ if len(row[phoneColumn]) == 0:
+ continue
+ contactDetails.append((phoneType, row[phoneColumn]))
+ except IndexError:
+ pass
+ if len(contactDetails) != 0:
+ yield str(yieldCount), row[nameColumn], contactDetails
+ yieldCount += 1
+
+ @classmethod
+ def _guess_columns(cls, row):
+ names = []
+ phones = []
+ for i, item in enumerate(row):
+ if cls._nameRe.search(item) is not None:
+ names.append((item, i))
+ elif cls._phoneRe.search(item) is not None:
+ phones.append((item, i))
+ elif cls._mobileRe.search(item) is not None:
+ phones.append((item, i))
+ if len(names) == 0:
+ names.append(("Name", 0))
+ if len(phones) == 0:
+ phones.append(("Phone", 1))
+
+ return names[0][1], phones