想用 Python 获取文件名 吗?这事儿其实挺简单的,但如果你想玩出花儿来,那就得好好研究研究了。别着急,我这就给你掰开了揉碎了讲讲,保准你看了就能上手。

最基础的方法,当然是 os 模块。这可是 Python 自带的宝贝,专门用来和操作系统打交道。用 os.listdir() 可以列出指定目录下的所有文件和文件夹,然后你就可以自己筛选出文件名了。

“`python
import os

dir_path = ‘/path/to/your/directory’ # 替换成你的目录
all_items = os.listdir(dir_path)
file_names = [item for item in all_items if os.path.isfile(os.path.join(dir_path, item))]

print(file_names)
“`

这段代码,先导入了 os 模块,然后指定了一个目录路径。os.listdir() 就像一个好奇的家伙,把这个目录下所有的东西都扒拉了出来,包括文件和文件夹。接着,我们用列表推导式,像一个细心的侦探一样,逐个检查这些“东西”,只有确定是文件(os.path.isfile())的,才会被保留下来,放进 file_names 这个列表里。最后,把这个列表打印出来,你就看到了所有的文件名了。

但是,问题来了。如果你只想获取特定类型的文件名,比如 .txt 文件,怎么办呢?这时候,os.path.splitext() 就派上用场了。它可以把文件名和扩展名分开,让你轻松判断文件类型。

“`python
import os

dir_path = ‘/path/to/your/directory’
txt_files = [f for f in os.listdir(dir_path) if f.endswith(‘.txt’)]

print(txt_files)
“`

瞧,这样就只获取 .txt 文件了!endswith() 方法就像一个挑剔的顾客,只接受以 .txt 结尾的文件名。

再进一步,如果目录下面还有子目录,而你想递归地获取所有 .txt 文件名,那就要用到 os.walk() 了。这个函数会像一个勤劳的园丁,一层一层地遍历目录树,把每个角落都翻出来。

“`python
import os

dir_path = ‘/path/to/your/directory’
txt_files = []

for root, _, files in os.walk(dir_path):
for file in files:
if file.endswith(‘.txt’):
txt_files.append(os.path.join(root, file)) # 完整的路径

print(txt_files)
“`

注意,这里我们用 os.path.join() 把目录路径和文件名拼接起来,得到了文件的完整路径。这很重要,因为在递归遍历时,只知道文件名是不够的,你需要知道文件在哪个目录下。

除了 os 模块,glob 模块也是一个不错的选择。它可以使用通配符来匹配文件名,更加灵活。

“`python
import glob

dir_path = ‘/path/to/your/directory’
txt_files = glob.glob(dir_path + ‘/*/.txt’, recursive=True)

print(txt_files)
“`

这段代码使用了 glob.glob() 函数,配合 **/*.txt 这个通配符,可以递归地匹配所有 .txt 文件。recursive=True 参数表示开启递归模式。

其实,pathlib 模块是 Python 3.4 之后才引入的,它用面向对象的方式来操作文件和目录,更加现代化。

“`python
from pathlib import Path

dir_path = Path(‘/path/to/your/directory’)
txt_files = [str(f.resolve()) for f in dir_path.rglob(‘*.txt’)]

print(txt_files)
“`

这里,我们首先创建了一个 Path 对象,表示目录路径。然后,使用 rglob() 方法递归地匹配所有 .txt 文件。rglob() 相当于 glob 模块的递归版本,更加方便。str(f.resolve()) 将 Path 对象转换为绝对路径字符串,保证了路径的准确性。

当然,获取文件名之后,你可能还想对文件名进行一些处理,比如提取文件名中的关键信息,或者修改文件名等等。这时候,正则表达式就派上用场了。

“`python
import os
import re

dir_path = ‘/path/to/your/directory’
file_names = [f for f in os.listdir(dir_path) if os.path.isfile(os.path.join(dir_path, f))]

for file_name in file_names:
match = re.search(r'(\w+)_(\d+).txt’, file_name) # 假设文件名格式是 name_number.txt
if match:
name = match.group(1)
number = match.group(2)
print(f”文件名:{file_name}, 名字:{name}, 数字:{number}”)
“`

这段代码假设文件名的格式是 name_number.txt,然后使用正则表达式提取了文件名中的名字和数字。re.search() 函数会在文件名中查找匹配的模式,如果找到了,就可以通过 match.group() 方法获取匹配到的内容。

说到底,Python 获取文件名 的方法有很多,选择哪种取决于你的具体需求。如果你只是想简单地列出目录下的文件名,os.listdir() 就够了。如果需要递归遍历,os.walk() 或者 pathlib.rglob() 更加方便。如果需要匹配特定类型的文件名,glob 模块或者 endswith() 方法更加灵活。如果需要对文件名进行复杂的操作,正则表达式是必不可少的工具。

希望这些技巧能帮你更好地使用 Python 获取文件名,让你的编程之路更加顺畅!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。