Найти - Пользователи
Полная версия: os.listdir не понимает строки
Начало » Центр помощи » os.listdir не понимает строки
1
Winged_Zhiraff
Пытаюсь присвоить методу 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 нафиг не надо, как я понимаю.

Вопрос: это меня надо лечить или код?
FishHook
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)
Winged_Zhiraff
Спасибо, и правда жуткий быдлокод, исправлюсь. Так лучше? Насчёт .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])

Что характерно, заработало, и даже читает кириллицу.
FishHook
Winged_Zhiraff
for n in range(len(folders))

переосознай циклы в питоне еще раз
py.user.next
для объединения путей

>>> import os
>>> 
>>> os.path.join('a', 'b', 'c')
'a/b/c'
>>>
Winged_Zhiraff
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.: Да, мой код ужасен.
FishHook
Winged_Zhiraff
FishHook, не поверишь - ошибку выдавало.
Может быть я дебил?
FishHook
А нет, не я.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB