Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中访问目录中的最后一个文件名_Python_Python 3.x_Python Os_Fileparsing - Fatal编程技术网

如何在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

非常感谢。我还是个新手,所以我从没想过要这么做。工作得很好谢谢你!我还是个新手,所以我从没想过要这么做。工作完美