Как с помощью Python получит список из каталога

satfan

Пользователь
Пользователь
Апр 21, 2020
98
6
8
IDLE (Python 3.10 64-bit)
Windows 10
----------------------------
Уважаемые спецы подскажите.
Есть каталог с музыкой, в нём файлы песен .mp3
Как с помощью Python получит список песен из этого каталога и записать построчно этот список в текстовый файл: моя музыка.txt ?
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Python:
import os

path = "путь к папке с музыкой"
music_list = os.listdir(path)
music_list = map(lambda x: x.removesuffix('.mp3'), music_list)
with open("My_music.txt", 'w') as f:
    f.write('\n'.join(music_list))
 

satfan

Пользователь
Пользователь
Апр 21, 2020
98
6
8
Спасибо Vershitel_sudeb
Выдаёт ошибки:
Traceback (most recent call last):
File "C:\Users\Пк\Desktop\Spisok_pesen\1.py", line 7, in <module>
f.write('\n'.join(music_list))
File "C:\Python\lib\encodings\cp1251.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2044' in position 2: character maps to <undefined>
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
Если я правильно понял ошибку, то в пути к папке с музыкой находятся нестандартные символы. Лучше всего чтобы там были только английские символы. Путь следует указывать либо в формате
/folder1/folder2
либо
\\folder1\\folder2

Если это не поможет, скинь, пожалуйста, путь к папке, попробую понять что не так
 

satfan

Пользователь
Пользователь
Апр 21, 2020
98
6
8
Спасибо Vershitel_sudeb
Точно есть русские слова.
Я на работе. Завтра скажу.
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
26
28
Лучше всего чтобы там были только английские символы
а что кириллицу, пробел не побороть?
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
а что кириллицу, пробел не побороть?
в принципе он вроде нормально должен с ней работать, тут интереснее другое, у него не считался символ \u2044,а это просто прямой слеш: '/'
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
26
28
речь о chr(47) => '/' косая черта - слеш?
почему Вы его так называете "\u2044"?
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 672
478
83
в принципе он вроде нормально должен с ней работать, тут интереснее другое, у него не считался символ \u2044,а это просто прямой слеш: '/'
речь о chr(47) => '/' косая черта - слеш?
почему Вы его так называете "\u2044"?
47 или U+002F - это слеш или косая черта
а 8260 или U+2044 - это дробная наклонная черта

это разные символы в юникоде
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
973
220
43
21
Москва
47 или U+002F - это слеш или косая черта
а 8260 или U+2044 - это дробная наклонная черта

это разные символы в юникоде
Учту, просто у него в ошибке \u2044, а при поиске нашел /, вот и назвал его слеш
 

Ципихович Эндрю

Активный пользователь
Пользователь
Мар 27, 2021
490
26
28
то, о чём нужно помнить добавляется))
Код:
print(chr(47))  # {chr(47)} => '/' или U+002F в юникоде - косая черта - слеш
print(chr(8260))  # {chr(8260)} => '⁄' или U+2044 в юникоде - это дробная наклонная черта
 
  • Мне нравится
Реакции: Vershitel_sudeb

satfan

Пользователь
Пользователь
Апр 21, 2020
98
6
8
Спасибо всем.
Убрал русские названия в пути к каталогу.
Всё равно ошибка:
Traceback (most recent call last):
File "E:\__Moi_scripti\Spisok_pesen\1.py", line 4, in <module>
music_list = os.listdir(path)
OSError: [WinError 123] Синтаксическая ошибка в имени файла, имени папки или метке тома: 'E:\\Zapis_RadioSure\x01.FM - Classic Rock Replay'
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
OSError: [WinError 123] Синтаксическая ошибка в имени файла, имени папки или метке тома: 'E:\\Zapis_RadioSure\x01.FM - Classic Rock Replay'
Ошибка возникает потому, что имя папки содержит последовательность символов \x.
Чтобы исправить можно добавить один обратный слеш:
Python:
path = 'E:\\Zapis_RadioSure\\x01.FM - Classic Rock Replay'
 

satfan

Пользователь
Пользователь
Апр 21, 2020
98
6
8
Уважаемый спасибо.
Так исправил:
Python:
import os

path = "E:\\Zapis_RadioSure\1.FM - Classic Rock Replay"
music_list = os.listdir(path)
music_list = map(lambda x: x.removesuffix('.mp3'), music_list)
with open("My_music.txt", 'w') as f:
    f.write('\n'.join(music_list))
Опять ошибка:
Traceback (most recent call last):
File "E:\__Moi_scripti\Spisok_pesen\1.py", line 4, in <module>
music_list = os.listdir(path)
OSError: [WinError 123] Синтаксическая ошибка в имени файла, имени папки или метке тома: 'E:\\Zapis_RadioSure\x01.FM - Classic Rock Replay'
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Нужно было исправить так:
Python:
path = 'E:\\Zapis_RadioSure\\x01.FM - Classic Rock Replay'
так как в вашем варианте теперь ошибка возникает из-за \1
 

satfan

Пользователь
Пользователь
Апр 21, 2020
98
6
8
Исправил, как Вы сказали. Опять ошибка:
Traceback (most recent call last):
File "E:\__Moi_scripti\Spisok_pesen\1.py", line 4, in <module>
music_list = os.listdir(path)
FileNotFoundError: [WinError 3] Системе не удается найти указанный путь: 'E:\\Zapis_RadioSure\\x01.FM - Classic Rock Replay'
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Исправил, как Вы сказали. Опять ошибка:
Если у вас код
Python:
import os

path = "E:\\Zapis_RadioSure\\x01.FM - Classic Rock Replay"
music_list = os.listdir(path)
music_list = map(lambda x: x.removesuffix('.mp3'), music_list)
with open("My_music.txt", 'w') as f:
    f.write('\n'.join(music_list))
и файлы находятся в папке E:\\Zapis_RadioSure\x01.FM - Classic Rock Replay то должно работать.
Возможно вы изменили имя папки.
 

satfan

Пользователь
Пользователь
Апр 21, 2020
98
6
8
Папка с музыкой осталась прежней: 1.FM - Classic Rock Replay
Вот весь путь в Win 10: E:\Zapis_RadioSure\1.FM - Classic Rock Replay
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Папка с музыкой осталась прежней: 1.FM - Classic Rock Replay
Вот весь путь в Win 10: E:\Zapis_RadioSure\1.FM - Classic Rock Replay
Значит код должен быть такой:
Python:
import os

path = "E:\\Zapis_RadioSure\\1.FM - Classic Rock Replay"
music_list = os.listdir(path)
music_list = map(lambda x: x.removesuffix('.mp3'), music_list)
with open("My_music.txt", 'w') as f:
    f.write('\n'.join(music_list))
 

satfan

Пользователь
Пользователь
Апр 21, 2020
98
6
8
Сделал по Вашему варианту:
Traceback (most recent call last):
File "E:\__Moi_scripti\Spisok_pesen\Spisok_pesen.py", line 7, in <module>
f.write('\n'.join(music_list))
File "C:\Python\lib\encodings\cp1251.py", line 19, in encode
return codecs.charmap_encode(input,self.errors,encoding_table)[0]
UnicodeEncodeError: 'charmap' codec can't encode character '\u2044' in position 2: character maps to <undefined>
 

stud_55

Модератор
Команда форума
Модератор
Апр 3, 2020
1 522
672
113
Сделал по Вашему варианту:
Предыдущая ошибка исправлена.
UnicodeEncodeError: 'charmap' codec can't encode character '\u2044' in position 2: character maps to <undefined>
Попробуйте записывать файл в utf-8:
Python:
import os

path = "E:\\Zapis_RadioSure\\1.FM - Classic Rock Replay"
music_list = os.listdir(path)
music_list = map(lambda x: x.removesuffix('.mp3'), music_list)
with open("My_music.txt", 'w', encoding='utf-8') as f:
    f.write('\n'.join(music_list))
 

Форум IT Специалистов