Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[98.80.143.34] |
|
Сообщ.
#1
,
|
|
|
Доброго вечера.
Имеется код, который выполняет рекурсивный поиск в каталоге С:\\MyFolder и подкаталогах по маске (расширению) файла. 1. Подскажите как скопировать все найденные папки в каталог Find. В данном каталоге найденные файлы разложить по подкаталогам JPG и TXT соответственно расширениям найденных файлов 2. В данном случае в result.txt записывается только имя файла с расширением. Как записывать полный путь + файла с расширением. 3. Записывается текст в кодировке utf-8, имена файлов на русском отображаются корректно. При этом в консоли имена файлов на русском отображаются не корректно. Как установить кодировку для вывода в консоль ? import os from os.path import expanduser import shutil path = 'С:\\MyFolder' fnames = ([file for root, dirs, files in os.walk(path) for file in files if file.endswith('.jpg') or file.endswith('.txt') #or file.endswith('.pdf') ]) myfile = open ("C:\\result.txt", 'w', encoding='utf-8') for fname in fnames: print(fname) myfile.write(fname + '\n') myfile.close Благодарю за помощь. |
Сообщ.
#2
,
|
|
|
Цитата art_ @ Версия питона меньше, чем 3.5? Установи win_unicode_console.При этом в консоли имена файлов на русском отображаются не корректно. Как установить кодировку для вывода в консоль ? Цитата art_ @ Это удобнее сократить до file.endswith('.jpg') or file.endswith('.txt') file.endswith(('.jpg', '.txt')) Цитата art_ @ Не выбрасывай путь при обработке - сможешь записать и его. В данном случае в result.txt записывается только имя файла с расширением. Как записывать полный путь + файла с расширением. |
Сообщ.
#3
,
|
|
|
Цитата Не выбрасывай путь при обработке - сможешь записать и его. Как это в коде записать ? Цитата Версия питона меньше, чем 3.5? Нет, 3.7 |
Сообщ.
#4
,
|
|
|
Цитата Установи win_unicode_console. Установил. Это проблему не решило(. |
Сообщ.
#5
,
|
|
|
Цитата art_ @ Ты пишешь Как это в коде записать ? fnames = ([file for root, dirs, files in os.walk(path) for file in files if file.endswith('.jpg') or file.endswith('.txt') #or file.endswith('.pdf') ]) os.walk(path) пробегает по подкаталогам path и для каждого выдаёт полное имя папки, список вложенных в неё папок и список содержащихся в ней файлов. Что нужно, чтобы получить вместо просто имён с расширениями полные имена? Ответ прост: приписать слева к именам файлов имена папок в которых они лежат. Так что пишем fnames = (path + file for path, dirs, files in os.walk(root) for file in files if file.endswith(('.jpg', '.txt')) ) # '.pdf' Цитата art_ @ Установил. Это проблему не решило(. Добавь куда-нибудь в начало программы строку import win_unicode_console; win_unicode_console.enable() |