簡體   English   中英

Python:列出驅動器、子目錄中的文件並按擴展名排序

[英]Python: List drives, files in subdirectories and sort by extension

我正在嘗試根據項目的主題編寫代碼,但遇到錯誤。 找到了一些腳本並將它們合並,但顯然沒有像我想象的那樣工作。

基本上目標是:

  1. 列出所有驅動器
  2. 列出驅動器和子目錄中的所有文件
  3. 此后按其擴展名對其進行排序

這是我編譯的代碼:

import os
import os.path
dr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
drives = ['%s: '%d for d in dr if os.path.exists('%s: '%d)]

def convert(list):
    return tuple(list)

listdrives = convert(drives)

for root, dirname, files in os.walk(listdrives):
    for x in files:
        x.sort(key=lambda f: os.path.splitext(f)[1])

print(x)

這是錯誤消息:

Traceback (most recent call last):
  File "d:/WORK/testlist.py", line 11, in <module>
    for root, dirname, files in os.walk(listdrives):
  File "C:\Users\MHKHR\AppData\Local\Programs\Python\Python38-32\lib\os.py", line 339, in walk
    top = fspath(top)
TypeError: expected str, bytes or os.PathLike object, not tuple

如果有人可以看一下,我會很高興! 謝謝!

編輯

另外,我在導出到 xlsx 時遇到語法錯誤。 我只是想不通為什么

import os
import os.path
import xlsxwriter

dr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
drives = ['%s:/'%d for d in dr if os.path.exists('%s:' % d)]

for drive in drives:
    for res in os.walk(drive):
        root, directories, files = res
        
        files.sort(key=lambda f: os.path.splitext(f)[1])
        files = [os.path.join(root, f) for f in files]

        return directories
        return files

workbook = xlsxwriter.workbook('D:\\WORK\\test.xlsx')
worksheet = workbook.add_worksheet()

#set column length
worksheet.set_column('A:A', 80)
worksheet.set_column('B:B', 80)

#write headers
worksheet.write('A1', 'Directories')
worksheet.write('B1', 'Files')

dirts = (directories)
fil = (files)

for d1 in range(len(dirts)):
    worksheet.write(d1+1, 0, dirts[d1])
    worksheet.write(d1+1, 1, fil[d1])

workbook.close()

這是在我的 Windows 機器上本地工作的東西:

import os
import os.path
dr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
drives = ['%s:/'%d for d in dr if os.path.exists('%s:' % d)]

for drive in drives:
    for res in os.walk(drive):
        root, directories, files = res
        
        files.sort(key=lambda f: os.path.splitext(f)[1])
        files = [os.path.join(root, f) for f in files]

        print(directories)
        print(files)

導致問題回溯的初始錯誤是由於您無法在列表中使用os.walk ,您必須在目錄路徑上使用os.walk並在每個驅動器上進行操作。

我在使用drives變量的反斜杠時遇到了問題,玩弄哪個有效。

您也不應該對列表中的單個 object 而不是整個列表 object 調用排序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM