因为标题意味着我希望创建一个脚本,允许我将目录中的文件名列表打印到CSV文件。
我的桌面上有一个文件夹,其中包含大约150个pdf文件夹。我希望能够将文件名打印到csv。
我是Python的新手,可能会从这个项目中跳出煎锅并进入火中。
有人能提供一些见解让我入门吗?
答案 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的一个很好的快捷方式,因为它支持通配符。