我正在创建一个脚本,它将使用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()
答案 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
将返回单独的文件和目录列表
#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)
{{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))
这样的代码更容易理解和修改。