Атрибут стирается, как только экземпляр используется в python [duplicate]

Имейте в виду, что независимо от сценария причина всегда одинакова в .NET:

Вы пытаетесь использовать ссылочную переменную, значение которой Nothing / null. Если для ссылочной переменной значение Nothing / null, это означает, что на самом деле оно не содержит ссылку на экземпляр любого объекта, который существует в куче.

Вы либо никогда не присваивали какую-либо переменную, никогда не создавали экземпляр значения, присвоенного переменной, или вы вручную устанавливали переменную, равную Nothing / null, или вы вызывали функцию, которая установите для этой переменной значение Nothing / null.

20
задан matt 19 May 2010 в 19:42
поделиться

2 ответа

Вы можете «перезагрузить» CSV-итератор, сбросив позицию чтения файлового объекта.

data = open("googlel.csv", "rb")
orig = csv.reader(data, delimiter = ';')
goodrows = []
for feed in gotfeeds:    
   for link,comments in feed.items():
       data.seek(0)
       for row in orig:
           print link
           if link in row[1]:
               row.append(comments)
               goodrows.append(row)
30
ответ дан Cerin 26 August 2018 в 16:23
поделиться
  • 1
    Отлично работает. В ближайшем будущем мой файл невелик, но я бы не хотел отследить, почему он медленный через пару месяцев. – matt 20 May 2010 в 01:27

Создание списка orig исключает необходимость перезагрузки / повторного просмотра csv:

orig = list(csv.reader(open("googlel.csv", "rb"), delimiter = ';'))
9
ответ дан unutbu 26 August 2018 в 16:23
поделиться
  • 1
    Это будет технически работать, но приведет к загрузке всего файла CSV в память. Не большая проблема, если файл небольшой, но это не будет масштабироваться. – Cerin 19 May 2010 в 20:00
  • 2
    @Крис. Правда. Если файл csv огромен, я бы ожидал, что он упомянет об этом в вопросе, но, безусловно, есть место для обеих наших интерпретаций. – unutbu 19 May 2010 в 20:16
  • 3
    Я согласен с Крисом С. Мы столкнулись с той же проблемой. В конечном итоге наши файлы CSV поднялись до 5 гб. Излишне говорить, что это был кошмар – dassouki 19 May 2010 в 20:54
  • 4
    Существует компромисс между скоростью и пространством. Если у вас есть пробел, использование списка будет быстрее, потому что повторного разбора csv не будет. Это не вопрос, какой метод лучше, а скорее какой метод более подходит для ситуации ОП. Поскольку он не объяснил, насколько велика CSV, любой метод может быть более уместным. – unutbu 19 May 2010 в 21:08
  • 5
    По моему опыту, лучше планировать масштабируемость, а затем считать, что это необязательно. В этом случае, делая его масштабируемым, он также не замедлит его, так как разбор CSV довольно прост. – Cerin 20 May 2010 в 15:03
Другие вопросы по тегам:

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