如何从os.listdir结果中排除目录?

时间:2017-05-24 06:55:43

标签: python python-3.x

我正在创建一个脚本,它将使用b64 / b16对目录中的文件进行编码,并且我使用os.listdir来执行此操作,但它还列出了导致问题的目录,因为现在它已经出现了问题。尝试编码目录,就像它是一个文件。

我如何从os.listdir结果中排除目录?

import os
import sys
import base64
import codecs
import time
import string
import glob

#C:\\Users\\Fedora\\Desktop\\Win 10
path = "C:\\Users\\Fedora\\Desktop\\Win 10"
dirs = os.listdir(path)
files = []
filecount = 0
fileprogress = 0
for file in dirs:
   files.append(file)
   filecount = filecount + 1

for x in files:
    os.system("cls")
    fileprogress = fileprogress + 1
    print("File " + str(fileprogress) + "/" + str(filecount))
    print("Encrypting " + x + "...")
    inputfile = open(path + "\\" + x, "rb")
    data = inputfile.read()
    inputfile.close()
    data = base64.b16encode(data)
    data = base64.b64encode(data)
    data = base64.b16encode(data)
    data = base64.b64encode(data)
    data = base64.b16encode(data)
    outputfile = open(path + "\\" + x + ".crypt", "wb")
    outputfile.write(data)
    outputfile.close()

3 个答案:

答案 0 :(得分:1)

您可以使用os.listdir()代替使用os.walk,而import os path = "C:\\Users\\Fedora\\Desktop\\Win 10" for (path, dirs, files) in os.walk(path): print path print dirs print files 将返回单独的文件和目录列表

python-oswalk-example

#Import the os module, for the os.walk function
import os

#Set the directory you want to start from
path = "C:\\Users\\Fedora\\Desktop\\Win 10"
for dirName, subdirList, fileList in os.walk(path):
    print('Found directory: %s' % dirName)
    for fname in fileList:
        print('\t%s' % fname)

pythoncentral os-walk

{{1}}

答案 1 :(得分:1)

使用filter

filepath = "C:\\Users\\Fedora\\Desktop\\Win 10"
dirs = os.listdir(path)
files = filter(lambda x:os.path.isfile(os.path.join(filepath, x)), dirs)

或使用os.path.isfile()列表理解

filepath = "C:\\Users\\Fedora\\Desktop\\Win 10"
dirs = os.listdir(path)
files = [x for x in dirs if os.path.isfile(os.path.join(filepath, x))]

答案 2 :(得分:1)

您可以使用os.path.isdir功能检查当前文件是否为目录。

此外,使用字符串格式化操作而不是字符串连接更好:不是

print("File " + str(fileprogress) + "/" + str(filecount))

print("File {}/{}".format(fileprogress, filecount))

这样的代码更容易理解和修改。