Python: AttributeError: объект 'NoneType' не имеет атрибута 'rfind'

Я пытаюсь определить расширение файла, используя os.path.splitext

вот мой код:

for emailid in msgs:
    typ, s = mail.fetch(emailid, "(RFC822)")
    m = email.message_from_string(s[0][1])
    result = re.findall(pattern,str)
    if result:     
        for part in m.walk():
            filename = part.get_filename()
            if filename:
                extension = os.path.splitext(fileName)
                if extension[1][1:] == 'csv':      
                    ### Process into a dataframe
                    df = pd.read_csv(StringIO(filename))

Вот ошибка чтения из IPython:

#### Begin error Message #####

    AttributeError                            Traceback (most recent call last)
<ipython-input-83-71fabd157c43> in <module>()
     40             if filename:
     41                 print type(filename)
---> 42                 extension = os.path.splitext(fileName)
     43                 if extension[1][1:] == 'csv':
     44                     ### Process into a dataframe

C:\Anaconda2\lib\ntpath.pyc in splitext(p)
    198 
    199 def splitext(p):
--> 200     return genericpath._splitext(p, sep, altsep, extsep)
    201 splitext.__doc__ = genericpath._splitext.__doc__
    202 

C:\Anaconda2\lib\genericpath.pyc in _splitext(p, sep, altsep, extsep)
     97     leading dots.  Returns "(root, ext)"; ext may be empty."""
     98 
---> 99     sepIndex = p.rfind(sep)
    100     if altsep:
    101         altsepIndex = p.rfind(altsep)

AttributeError: 'NoneType' object has no attribute 'rfind'

#### End Error message #####

NoneType должен означать, что я ничего не передаю, когда я печатаю тип (имя файла), я получаю:

Как передать файл, чтобы я мог определить расширение, а затем создать фрейм данных? мне нужно сохранить на диск

это будет для сценария синтаксического анализа, который регулярно отправляется по расписанию csv'у, и, следовательно, регулярное выражение для определения правила, которому нужно следовать.

1 ответ

Решение

В extension = os.path.splitext(fileName)вы используете переменную fileName, вместо filename, Python чувствителен к регистру, так что это разные переменные. Очевидно, fileName в другом месте установлено значение None, и изменение этого экземпляра на filename должен исправить эту ошибку.

Другие вопросы по тегам