如何访问 python 目录中的最后一个文件名
How to access the last filename in a directory in python
我正在尝试遍历目录中的一些文件。如果文件名有两个特定的字符串,那么我应该打开并阅读这些文件以获取信息。但是,如果 none 个文件有这两个字符串,我只想打印一次错误消息。
for filename in os.listdir(directory):
if filename.find("<string1>") != -1 and filename.find("<string2>") != -1:
#open file
else:
#print error message
我知道这样做会打印与目录中的文件一样多的错误消息(即,如果有 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
但我发现这不起作用。只有在最后一个文件名已被读取但不匹配时,我如何才能得到要打印的错误消息?
一个简单的解决方案是在 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
您或许还可以使用 glob
模块来获取文件名:
import glob
filenames = glob.glob(directory + '/*string1*string2*')
另一种方法是使用变量来检查是否所有文件都已处理。检查并发现它在 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
我正在尝试遍历目录中的一些文件。如果文件名有两个特定的字符串,那么我应该打开并阅读这些文件以获取信息。但是,如果 none 个文件有这两个字符串,我只想打印一次错误消息。
for filename in os.listdir(directory):
if filename.find("<string1>") != -1 and filename.find("<string2>") != -1:
#open file
else:
#print error message
我知道这样做会打印与目录中的文件一样多的错误消息(即,如果有 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
但我发现这不起作用。只有在最后一个文件名已被读取但不匹配时,我如何才能得到要打印的错误消息?
一个简单的解决方案是在 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
您或许还可以使用 glob
模块来获取文件名:
import glob
filenames = glob.glob(directory + '/*string1*string2*')
另一种方法是使用变量来检查是否所有文件都已处理。检查并发现它在 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