如何在python中访问目录中的最后一个文件名
我正试图循环浏览目录中的一些文件。如果文件名包含两个特定字符串,那么我应该打开并读取这些文件以获取信息。但是,如果所有文件都没有这两个字符串,我只想打印一次错误消息如何在python中访问目录中的最后一个文件名,python,python-3.x,python-os,fileparsing,Python,Python 3.x,Python Os,Fileparsing,我正试图循环浏览目录中的一些文件。如果文件名包含两个特定字符串,那么我应该打开并读取这些文件以获取信息。但是,如果所有文件都没有这两个字符串,我只想打印一次错误消息 for filename in os.listdir(directory): if filename.find("<string1>") != -1 and filename.find("<string2>") != -1: #open file else: #print
for filename in os.listdir(directory):
if filename.find("<string1>") != -1 and filename.find("<string2>") != -1:
#open file
else:
#print error message
os.listdir(目录)中文件名的:
如果filename.find(“”)=-1和文件名。查找(“”!=-1:
#打开文件
其他:
#打印错误消息
我知道这样做将打印与目录中文件数量相同的错误消息(即,如果有15个文件没有匹配项,我将收到15条错误消息)。但我想要的是,在目录中的N个文件中没有任何匹配项之后,只打印一次错误消息。我想我可以这样做:
for filename in os.listdir(directory):
if filename.find("<string1>") != -1 and filename.find("<string2>") != -1:
#open file
else:
if filename[-1]: #if filename is last in directory
#print error message
os.listdir(目录)中文件名的:
如果filename.find(“”)=-1和文件名。查找(“”!=-1:
#打开文件
其他:
如果文件名[-1]:#如果文件名是目录中的最后一个
#打印错误消息
但我发现这不管用。如何在读取了最后一个文件名且文件名不匹配后才打印错误消息?一个简单的解决方案是在for循环之前初始化一些布尔标志,例如
found=false
如果找到文件,请设置
found=true
。然后,您可以在for循环完成后检查found
的值,并根据其值打印相应的消息。一个简单的解决方案是在for循环之前初始化一些布尔标志,例如found=false
如果找到文件,请设置
found=true
。然后,您可以在for循环完成后检查found
的值,并根据其值打印相应的消息。筛选for
-循环之前的文件列表:
filenames = [fname for fname in os.listdir(directory)
if '<string1>' in fname and '<string2>' in fname]
if filenames:
for filename in filenames:
#open file
else:
#print error message
为-循环过滤
之前的文件列表:
filenames = [fname for fname in os.listdir(directory)
if '<string1>' in fname and '<string2>' in fname]
if filenames:
for filename in filenames:
#open file
else:
#print error message
另一种方法是使用变量检查是否已处理所有文件。检查发现它在Python 2.7中工作
import os
directory = "E:\\test\\"
files_count = len(os.listdir(directory))
files_processed = 0
for filename in os.listdir(directory):
if 'string1' in filename and 'string2' in filename:
#open file
print ("Opening file")
else:
files_processed = files_processed + 1
if (files_processed >= files_count):
print ("error message")
另一种方法是使用变量检查是否已处理所有文件。检查发现它在Python 2.7中工作
import os
directory = "E:\\test\\"
files_count = len(os.listdir(directory))
files_processed = 0
for filename in os.listdir(directory):
if 'string1' in filename and 'string2' in filename:
#open file
print ("Opening file")
else:
files_processed = files_processed + 1
if (files_processed >= files_count):
print ("error message")
不确定这是否极端。但我会把它变成一个函数,然后引发IOError。
另外,我总是使用绝对路径。也可以尝试pathlib
模块
import os
def get_files(directory):
for filename in os.listdir(directory):
if "string1" in filename and "string2" in filename:
yield filename
raise IOError("No such file")
for file in get_files('.'):
print(file)
# do stuff with file
不确定这是否极端。但我会把它变成一个函数,然后引发IOError。
另外,我总是使用绝对路径。也可以尝试pathlib
模块
import os
def get_files(directory):
for filename in os.listdir(directory):
if "string1" in filename and "string2" in filename:
yield filename
raise IOError("No such file")
for file in get_files('.'):
print(file)
# do stuff with file
非常感谢。我还是个新手,所以我从没想过要这么做。工作得很好谢谢你!我还是个新手,所以我从没想过要这么做。工作完美