我正在尝试编写一个Python脚本来打印目录中的文件列表

时间:2016-07-08 15:15:33

标签: python csv

因为标题意味着我希望创建一个脚本,允许我将目录中的文件名列表打印到CSV文件。

我的桌面上有一个文件夹,其中包含大约150个pdf文件夹。我希望能够将文件名打印到csv。

我是Python的新手,可能会从这个项目中跳出煎锅并进入火中。

有人能提供一些见解让我入门吗?

3 个答案:

答案 0 :(得分:1)

首先,您需要先抓取目录中的所有文件,然后将它们写入文件。

from os import listdir
from os.path import isfile, join
import csv

onlyfiles = [f for f in listdir("./") if isfile(join("./", f))]

with open('file_name.csv', 'w') as print_to:
    writer = csv.writer(print_to)
    writer.writerow(onlyfiles)

请注意

第5行的

"./"是您要从中获取文件的目录。

请将'file_name.csv'替换为您想要的文件名。

答案 1 :(得分:0)

import os
csvpath = "csvfile.csv"
dirpath = "."
f = open("csvpath, "wb")
f.write(",".join(os.listdir(dirpath)))
f.close()

可以改进这种方式,以便以您需要的方式呈现文件名,例如将其取回或者其他内容。例如,这很可能不会包含UTF-8格式的unicode文件名,但会使编码变得混乱,但很容易解决所有问题。

如果你有很大的目录,有很多文件,你可能需要等一段时间才能获得所有的os.listdir()。这也可以通过使用一些其他方法而不是os.listdir()来修复。

要区分文件和子目录,请参阅Michael的回答。

此外,如果您愿意,可以使用os.path.isfile()或os.path.isdir()递归获取所有子目录。

像这样:

def getall (path):
    files = []
    for x in os.listdir(path):
        x = os.path.join(path, x)
        if os.path.isdir(x): files += getall(x)
        else: files.append(x)
    return files

答案 2 :(得分:0)

以下内容将创建一个包含所有* .pdf文件的csv文件:

from glob import glob
with open('/tmp/filelist.csv', 'w') as fout:
    # write the csv header -- optional
    fout.write("filename\n")
    # write each filename with a newline characer
    fout.writelines(['%s\n' % fn for fn in glob('/path/to/*.pdf')])

glob()是使用listdir的一个很好的快捷方式,因为它支持通配符。