【问题标题】:How to list out directories in a csv file如何列出csv文件中的目录
【发布时间】:2020-07-30 12:05:00
【问题描述】:

我正在尝试在 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 })

【问题讨论】:

    标签: python list csv codeigniter data-science


    【解决方案1】:

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

    仅供参考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})
    

    【讨论】:

    • 谢谢!!!但是空目录的问题,它没有正确地给出空目录。
    • 所以如果一个文件夹既没有任何文件也没有任何文件夹,那么它的空文件夹是正确的,所以我们正在检查它并将其附加到列表中,你想要一个所有空目录的聚合列表吗?
    • 是的。请帮助我。提前致谢
    • 我已经编辑了答案,主要是我已经将 listOfEmptyDirs = [] 移出 for 循环,以便它聚合所有空目录的列表。
    • 很抱歉给您带来困扰@Nishant Patel,我没有正确获取空目录。而且我还没有得到更新的代码
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-29
    • 2012-12-09
    • 2012-01-28
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    相关资源
    最近更新 更多