На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD
  
    > Рекурсивный поиск файлов по маске + копирование файлов , поиск файлов по маске, копирование файлов
      Доброго вечера.

      Имеется код, который выполняет рекурсивный поиск в каталоге С:\\MyFolder и подкаталогах по маске (расширению) файла.

      1. Подскажите как скопировать все найденные папки в каталог Find. В данном каталоге найденные файлы разложить по подкаталогам JPG и TXT соответственно расширениям найденных файлов
      2. В данном случае в result.txt записывается только имя файла с расширением. Как записывать полный путь + файла с расширением.
      3. Записывается текст в кодировке utf-8, имена файлов на русском отображаются корректно. При этом в консоли имена файлов на русском отображаются не корректно. Как установить кодировку для вывода в консоль ?
      ExpandedWrap disabled
        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


      Благодарю за помощь.
        Цитата art_ @
        При этом в консоли имена файлов на русском отображаются не корректно. Как установить кодировку для вывода в консоль ?
        Версия питона меньше, чем 3.5? Установи win_unicode_console.
        Цитата art_ @
        file.endswith('.jpg') or file.endswith('.txt')
        Это удобнее сократить до
        ExpandedWrap disabled
          file.endswith(('.jpg', '.txt'))
        Да и работать немного быстрее будет.
        Цитата art_ @
        В данном случае в result.txt записывается только имя файла с расширением. Как записывать полный путь + файла с расширением.
        Не выбрасывай путь при обработке - сможешь записать и его.
          Цитата
          Не выбрасывай путь при обработке - сможешь записать и его.

          Как это в коде записать ?

          Цитата

          Версия питона меньше, чем 3.5?

          Нет, 3.7
            Цитата
            Установи win_unicode_console.


            Установил. Это проблему не решило(.
              Цитата art_ @
              Как это в коде записать ?
              Ты пишешь
              ExpandedWrap disabled
                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 и для каждого выдаёт полное имя папки, список вложенных в неё папок и список содержащихся в ней файлов.

              Что нужно, чтобы получить вместо просто имён с расширениями полные имена? Ответ прост: приписать слева к именам файлов имена папок в которых они лежат.

              Так что пишем
              ExpandedWrap disabled
                fnames = (path + file for path, dirs, files in os.walk(root)
                               for file in files
                               if file.endswith(('.jpg', '.txt')) ) # '.pdf'
              (возможно ещё разделитель надо добавить)

              Цитата art_ @
              Установил. Это проблему не решило(.

              Добавь куда-нибудь в начало программы строку
              ExpandedWrap disabled
                import win_unicode_console; win_unicode_console.enable()
              Сообщение отредактировано: amk -
              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
              0 пользователей:


              Рейтинг@Mail.ru
              [ Script execution time: 0,0499 ]   [ 15 queries used ]   [ Generated: 25.06.24, 00:13 GMT ]