首页 > 解决方案 > 如何列出csv文件中的目录

问题描述

我正在尝试在 csv 中列出目录名称和文件名称以及 mp4 文件和空目录。我得到了输出,但它打印了很多次。有什么帮助吗?提前致谢。

import csv
import os
import sys

with open('Files.csv', 'w', newline='') as f:
fieldnames = ['Foldername', 'Filename','mp4filelist','Empty folders']
writer = csv.DictWriter(f, fieldnames=fieldnames)
writer.writeheader()

for dirpath, dirnames, files in os.walk(sys.argv[1]):
    for file_name in files:
        for root, dirs, files in os.walk(sys.argv[1]):
            for file in files:
                if(file.endswith(".mp4")):
    
                    listmp4 = (os.path.join(root,file))
  
                    listOfEmptyDirs = [dirpath for (dirpath, dirnames, filenames) in os.walk(sys.argv[1]) if len(dirnames) == 0 and len(filenames) == 0]
                   for elem in listOfEmptyDirs:

                       writer.writerow({'Foldername' : f'{dirpath}', 'Filename' : file_name, 'mp4filelist' : listmp4, 'Empty folders' : listOfEmptyDirs })

标签: pythonlistcsvcodeigniterdata-science

解决方案


在您的代码中,您两次遍历目录,这就是您有多个条目的原因

仅供参考os.walk(sys.argv[1]),递归解析目录,因此您无需再次调用它

我从您的要求中得到的是,您需要 mp4 文件名和目录路径,一列用于 mp4 文件列表,另一列用于空目录列表,因此您可以这样做:

import csv
import os
import ctype


def has_hidden_attribute(filepath):
    try:
        attrs = ctypes.windll.kernel32.GetFileAttributesW(unicode(filepath))
        assert attrs != -1
        result = bool(attrs & 2)
    except (AttributeError, AssertionError):
        result = False
    return result

with open('Files.csv', 'w') as f:
    fieldnames = ['Foldername', 'Filename', 'mp4filelist', 'Empty folders']
    writer = csv.DictWriter(f, fieldnames=fieldnames)
    writer.writeheader()
    listOfEmptyDirs = []
    for dirpath, dirnames, files in os.walk(sys.argv[1]):
        print(dirpath, dirnames, files)
        listmp4 = [os.path.join(dirpath, file) for file in files if file.endswith(".mp4")]
        if len(dirnames) == 0 and len(files) == 0 and has_hidden_attribute(dirpath):
            listOfEmptyDirs.append(dirpath)
        for filename in files:
            writer.writerow({'Foldername': str(dirpath), 'Filename': filename, 'mp4filelist': listmp4,
                             'Empty folders': listOfEmptyDirs})

推荐阅读