Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 12, 2011 18:01:05

vl_dex
От:
Зарегистрирован: 2011-11-10
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Как отправить переменную в класс

Здравствуйте! Есть такой вот модуль corpus:

import os
class Corpus:
def __init__(self, adres):
self.adres=adres
def emails_as_string(self):
data=os.listdir(adres)
j=len(data)
i=0
while i < j:
a=(data[i])
if a[0]==('!'):
j=j-1
i=i-1
del data[0]
i=i+1
for i in range(j):
fname=data[i]
l=(adres+data[i])
l=l.rstrip()
a_file=open(l)
body=a_file.read()
return(body,fname)
И есть другой модуль, который вызывает этот так:
corpus = Corpus(r'\path\to\directory\with\emails')
И
for fname, body in corpus.emails_as_string():
print(fname)
print(body)
print('-------------------------')
count += 1
print('Finished: ', count, 'files processed.')
Так вот, как правильно написать coprus, чтобы все работало?

Сейчас при исполнении (NameError: global name ‘adres’ is not defined)

Извините, что написал все так смазано, просто новичок в python,



Отредактировано (Ноя. 12, 2011 19:13:52)

Офлайн

#2 Ноя. 12, 2011 18:58:38

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Как отправить переменную в класс

надо везде писать self.adres или его определить в текущем контексте
adres=self.adres



Офлайн

#3 Ноя. 12, 2011 19:03:26

vl_dex
От:
Зарегистрирован: 2011-11-10
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Как отправить переменную в класс

adres=self.adres
NameError: global name ‘adres’ is not defined

Сейчас я делаю так:

import corpus
mc = corpus.Corpus('C:/1/')
for fname, body in mc.emails_as_string():
print(fname)
print(body)



Отредактировано (Ноя. 12, 2011 19:14:08)

Офлайн

#4 Ноя. 12, 2011 19:17:18

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Как отправить переменную в класс

А куда вы вставили магическую строчку?

        def emails_as_string(self):
adres=self.adres
data=os.listdir(adres)
так сделали?



Офлайн

#5 Ноя. 12, 2011 19:23:02

vl_dex
От:
Зарегистрирован: 2011-11-10
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Как отправить переменную в класс

Да. Сейчас перезагрузил Shell, и теперь вообще все выглядит так:

>>> import corpus
>>> mc= corpus.Corpus('C:/1/')
>>> for fname, body in mc.emails_as_string():
print(fname, body)








.
То есть пустота (точку я сам поставил внизу)
Помогает только рестарт Shella



Отредактировано (Ноя. 12, 2011 19:24:24)

Офлайн

#6 Ноя. 12, 2011 19:46:55

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Как отправить переменную в класс

Значит вам настала пора осваивать пошаговую отладку скриптов. выполняете и смотрите - то получается что надо или нет. Несколько странно что for вы решили выполнять один раз.



Офлайн

#7 Ноя. 12, 2011 19:51:47

vl_dex
От:
Зарегистрирован: 2011-11-10
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Как отправить переменную в класс

Как бы вы посоветовали поступить с for?



Отредактировано (Ноя. 12, 2011 19:52:13)

Офлайн

#8 Ноя. 13, 2011 08:06:01

sp3
От:
Зарегистрирован: 2010-01-12
Сообщения: 405
Репутация: +  18  -
Профиль   Отправить e-mail  

Как отправить переменную в класс

import os
import os
class Corpus:
def __init__(self, adres):
self.adres=adres

def emails_as_string(self):
for fname in os.listdir(self.adres):
if fname.startswith('!'):
continue
fullpath =os.path.join(self.adres, fname)

if os.path.isfile(fullpath):
yield open(fullpath).read(), fname



mails = Corpus(r'E:\test')

for x in mails.emails_as_string():
print x



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version