Очистите файл csv в C [duplicate]

Я немного поиграл с super() и узнал, что мы можем изменить порядок вызова.

Например, у нас есть следующая структура иерархии:

    A
   / \
  B   C
   \ /
    D

In этот случай MRO of D будет (только для Python 3):

In [26]: D.__mro__
Out[26]: (__main__.D, __main__.B, __main__.C, __main__.A, object)

Давайте создадим класс, где super() вызывает после выполнения метода.

In [23]: class A(object): #  or with Python 3 can define class A:
...:     def __init__(self):
...:         print("I'm from A")
...:  
...: class B(A):
...:      def __init__(self):
...:          print("I'm from B")
...:          super().__init__()
...:   
...: class C(A):
...:      def __init__(self):
...:          print("I'm from C")
...:          super().__init__()
...:  
...: class D(B, C):
...:      def __init__(self):
...:          print("I'm from D")
...:          super().__init__()
...: d = D()
...:
I'm from D
I'm from B
I'm from C
I'm from A

    A
   / ⇖
  B ⇒ C
   ⇖ /
    D

Таким образом, мы можем видеть, что порядок разрешения такой же, как в MRO. Но когда мы назовем super() в начале метода:

In [21]: class A(object):  # or class A:
...:     def __init__(self):
...:         print("I'm from A")
...:  
...: class B(A):
...:      def __init__(self):
...:          super().__init__()  # or super(B, self).__init_()
...:          print("I'm from B")
...:   
...: class C(A):
...:      def __init__(self):
...:          super().__init__()
...:          print("I'm from C")
...:  
...: class D(B, C):
...:      def __init__(self):
...:          super().__init__()
...:          print("I'm from D")
...: d = D()
...: 
I'm from A
I'm from C
I'm from B
I'm from D

У нас есть другой порядок, он меняет порядок кортежа MRO.

    A
   / ⇘
  B ⇐ C
   ⇘ /
    D 

Для Дополнительное чтение Я бы рекомендовал следующие ответы:

  1. Пример линеаризации C3 с супер (большая иерархия)
  2. Важные изменения поведения между старыми и новые классы стиля
  3. Внутренняя история о классах нового стиля

8
задан Jonathan Leffler 2 January 2013 в 02:33
поделиться

3 ответа

Взгляните на libcsv , который является библиотекой CSV, написанной в ANSI C89.

9
ответ дан Garett 22 August 2018 в 20:28
поделиться

Анализ CSV не слишком сложный, зависит от структуры CSV, посмотрите на функцию strtok .

0
ответ дан HMarioD 22 August 2018 в 20:28
поделиться
  • 1
    Разбор CSV-файла с кавычками и запятыми в значениях полей с помощью strtok() не очень просто. – Jonathan Leffler 2 January 2013 в 02:29
  • 2
    Правильны ли вы, в некоторых случаях сложные CSV могут потребовать некоторой работы, я отредактирую свой пост. – HMarioD 2 January 2013 в 02:37
  • 3
    Это очень плохая идея. strtok интерпретирует & quot ;, & quot; и "," тоже самое. когда запятая является разделителем. Ваши лексемы могут оказаться в неправильных столбцах. – EvilTeach 2 January 2013 в 03:18

Существует простая библиотека парсеров CSV, описанная в превосходной книге «Практика программирования ] Kernighan и Pike , а источник доступен на сайте, связанном с.

2
ответ дан Jonathan Leffler 22 August 2018 в 20:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: