在 Python 中的目录中查找特定路径
Finding particular path in directory in Python
我怎样才能找到包含像 20170423 这样的日期的目录的路径?意思是,它可以是任何日期,但我想拥有那个特定的路径,直到我得到一个包含日期的文件夹。可能有几个包含该模式的子目录,但这是一种特殊情况,我需要提供更高的精度,例如文件夹的内容 select 正确的。如果您喜欢特殊情况,请试一试,但对于我知道沿途只有一个文件夹包含该模式的情况,我开始的方式是:
directPaths_list = [f.path for f in os.scandir( start ) if f.is_dir() ]
这给了我从开始文件夹到结束的所有路径。现在,我想 return 具有日期模式的路径,特别是一个,让我们说它的 int(folder_name) 是 < datetime.datetime.today()
我可以想出一个粗略的解决方案,但是 SO 的人在想出简洁优雅的解决方案方面技能非常好,所以它是..有什么想法吗?谢谢!
例如,对于路径 start= C:/ 这将是 return C:\Users\abc\def\ghi170412
我在想这样的事情可行:
[f.path for f in os.scandir('C:\Users\abc\def\ghi\') if f.is_dir() and str(f.path).endswith(str(2),-2,-1) ]
假设日期 20170423
是一个相应命名的文件。
然后你可以使用 os.walk()
:
start = "C:\Users\abc\"
for dirpath, dirnames, filenames in os.walk(start):
for filename in filenames:
if filename == "20170412":
filename = os.path.join(dirpath, filename)
print(filename)
print(dirpath)
如果只存在一个文件 C:\Users\abc\def\ghi170412
那么上面的代码会输出:
C:\Users\abc\def\ghi170412
C:\Users\abc\def\ghi\
您当然可以更改 if 语句以适应您是否要检查 filename.startswith("2017")
或其他任何内容。
警告: 如果你这样做 start = "C:\"
那么这很可能需要 looong 时间才能完成。 因为它将 运行 遍历 C 盘上的每个目录。
你同样可以改变for filename in filenames
for dirname in dirnames:
if dirname == "20170412":
dirname = os.path.join(dirpath, dirname )
print(dirname)
print(dirpath)
因此,如果 C:\Users\abc\def\ghi170412
实际上是一个目录,那么上面的输出将与之前相同:
C:\Users\abc\def\ghi170412
C:\Users\abc\def\ghi\
I was hoping for something more succinct
如果你称之为更简短的话,你仍然可以将它打包到列表理解中。
files = [os.path.join(dir, f) for dir, dirs, files in os.walk(start) for f in files if f == "20170412"]
我怎样才能找到包含像 20170423 这样的日期的目录的路径?意思是,它可以是任何日期,但我想拥有那个特定的路径,直到我得到一个包含日期的文件夹。可能有几个包含该模式的子目录,但这是一种特殊情况,我需要提供更高的精度,例如文件夹的内容 select 正确的。如果您喜欢特殊情况,请试一试,但对于我知道沿途只有一个文件夹包含该模式的情况,我开始的方式是:
directPaths_list = [f.path for f in os.scandir( start ) if f.is_dir() ]
这给了我从开始文件夹到结束的所有路径。现在,我想 return 具有日期模式的路径,特别是一个,让我们说它的 int(folder_name) 是 < datetime.datetime.today()
我可以想出一个粗略的解决方案,但是 SO 的人在想出简洁优雅的解决方案方面技能非常好,所以它是..有什么想法吗?谢谢!
例如,对于路径 start= C:/ 这将是 return C:\Users\abc\def\ghi170412
我在想这样的事情可行:
[f.path for f in os.scandir('C:\Users\abc\def\ghi\') if f.is_dir() and str(f.path).endswith(str(2),-2,-1) ]
假设日期 20170423
是一个相应命名的文件。
然后你可以使用 os.walk()
:
start = "C:\Users\abc\"
for dirpath, dirnames, filenames in os.walk(start):
for filename in filenames:
if filename == "20170412":
filename = os.path.join(dirpath, filename)
print(filename)
print(dirpath)
如果只存在一个文件 C:\Users\abc\def\ghi170412
那么上面的代码会输出:
C:\Users\abc\def\ghi170412
C:\Users\abc\def\ghi\
您当然可以更改 if 语句以适应您是否要检查 filename.startswith("2017")
或其他任何内容。
警告: 如果你这样做 start = "C:\"
那么这很可能需要 looong 时间才能完成。 因为它将 运行 遍历 C 盘上的每个目录。
你同样可以改变for filename in filenames
for dirname in dirnames:
if dirname == "20170412":
dirname = os.path.join(dirpath, dirname )
print(dirname)
print(dirpath)
因此,如果 C:\Users\abc\def\ghi170412
实际上是一个目录,那么上面的输出将与之前相同:
C:\Users\abc\def\ghi170412
C:\Users\abc\def\ghi\
I was hoping for something more succinct
如果你称之为更简短的话,你仍然可以将它打包到列表理解中。
files = [os.path.join(dir, f) for dir, dirs, files in os.walk(start) for f in files if f == "20170412"]