Уведомления

Группа в Telegram: @pythonsu

#1 Май 4, 2014 04:12:32

Winged_Zhiraff
Зарегистрирован: 2014-05-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

os.listdir не понимает строки

Пытаюсь присвоить методу os.listdir путь через строку:

—-

import os
listOfFolders = os.listdir('Changer')
"""Создает и возвращает кортеж из файлов внутри папки Changer"""
countOfFolders = len(listOfFolders)
"""Присваивает переменной countOfFolders число подпапок в папке Changer"""
for f in range(0, countOfFolders):
    PathOne = str('Changer/' + listOfFolders[f])
    listOfFiles = os.listdir(PathOne)
    countOfFiles = len(listOfFiles)
    print('Список файлов папки ' + listOfFolders[f])
    for i in range(0, countOfFiles):
        print(listOfFiles[i])

—-

Выдаёт ошибку

Traceback (most recent call last):
File “C:\Python27\Новый текстовый документ.py”, line 8, in <module>
listOfFiles = os.listdir(PathOne)
WindowsError: : ‘Changer/1/*.*’

При ручном прописывании пути в коде всё работает. При присваивании строки в качестве пути - ошибка и “/*.*” в конце пути, что методу os.listdir нафиг не надо, как я понимаю.

Вопрос: это меня надо лечить или код?

Отредактировано Winged_Zhiraff (Май 4, 2014 04:29:13)

Офлайн

#2 Май 4, 2014 09:22:52

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

os.listdir не понимает строки

Winged_Zhiraff
for f in range(0, countOfFolders):
    listOfFolders[f]
Бебебебе, плохо
так лучше
for f in os.listdir('Changer'):
    PathOne = str('Changer/' + f)

а так еще лучше
path_one = 'Changer/{}'.format(f)



Офлайн

#3 Май 4, 2014 10:30:02

Winged_Zhiraff
Зарегистрирован: 2014-05-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

os.listdir не понимает строки

Спасибо, и правда жуткий быдлокод, исправлюсь. Так лучше? Насчёт .format просто ещё не прочитал, что за зверь.

import os
folders = os.listdir('folder')
for n in range(len(folders)):
    files = os.listdir('folder/' + folders[n])
    print('Список файлов папки ' + folders[n] + ':')
    for i in range(len(files)): 
        print(files[i])

Что характерно, заработало, и даже читает кириллицу.

Офлайн

#4 Май 4, 2014 10:43:37

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

os.listdir не понимает строки

Winged_Zhiraff
for n in range(len(folders))

переосознай циклы в питоне еще раз



Офлайн

#5 Май 4, 2014 11:58:39

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9730
Репутация: +  843  -
Профиль   Отправить e-mail  

os.listdir не понимает строки

для объединения путей

>>> import os
>>> 
>>> os.path.join('a', 'b', 'c')
'a/b/c'
>>>



Офлайн

#6 Май 4, 2014 12:26:01

Winged_Zhiraff
Зарегистрирован: 2014-05-04
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

os.listdir не понимает строки

FishHook, не поверишь - ошибку выдавало. Пришлось через жопу
В коде, который написан - да, работает.
В том, ради которого затевалось -
TypeError: list indices must be integers, not str

Можешь дальше делать фэйспалмы, но это:

import os
folders = os.listdir('folder')
for n in range(len(folders)):
    files = os.listdir('folder/'+folders[n])
    print(folders[n])
    for i in range(len(files)):
        mypath = str('folder/' + folders[n] + "/")
        myname = str(files[i])[:4] + str(files[i])[22:]
        os.rename(mypath + files[i], mypath + myname)

с in os.listdir не работает

P.S.: Да, мой код ужасен.

Отредактировано Winged_Zhiraff (Май 4, 2014 12:32:45)

Офлайн

#7 Май 4, 2014 12:53:38

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

os.listdir не понимает строки

Winged_Zhiraff
FishHook, не поверишь - ошибку выдавало.
Может быть я дебил?



Офлайн

#8 Май 4, 2014 12:53:58

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

os.listdir не понимает строки

А нет, не я.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version