示例:python根据文件名查找文件路径名

示例:根据文件名查找文件路径名,并重新输出为excel

利用pandas读取excel文件,寻找对应文件的存放路径

import pandas as pd
import os

def picture_handle():
    pic_namepath = {}
    for path, dirs, files in os.walk('./目标文件夹'):
        if files:
            # print(path, dirs, files)
            for name in files:
                pic_name = name.split('.')[0]
                pic_path = os.path.join(path, name)
                pic_namepath[pic_name] = pic_path
    return pic_namepath

# print(pic_namepath)
def file_matching(picture_namepath):
    is_exsited = []
    xlsx = pd.ExcelFile('./读取excel.xlsx')
    df = pd.read_excel(xlsx)
    xlsx_bundle_name = df['数据名称']
    for bundle_name in xlsx_bundle_name:
        if bundle_name in picture_namepath:
            is_exsited.append((picture_namepath[bundle_name]))
        else:
            is_exsited.append(False)
    col_name = df.columns.tolist()
    col_name.append('对应文件路径')
    df = df.reindex(columns=col_name)
    df['对应文件路径'] = is_exsited
    df.to_excel('./文件名对应的路径名.xlsx', sheet_name='Sheet1')


if __name__ == "__main__":
    handle = picture_handle()
    file_matching(handle)
<think>好的,我现在需要回答用户关于如何使用Python根据文件名file_path获取文件路径文件名和文件类型的问题。首先,我得回忆一下Python中有哪些库可以用来处理文件路径。常见的应该是os.path模块和pathlib模块。用户可能希望得到两种方法的解释,或者其中一种更现代的,比如pathlib。 首先,用户提到的文件名file_path应该是一个包含完整路径的字符串,比如"/home/user/documents/report.txt"。目标是将这个路径分解成路径文件名和扩展名。对于os.path,常用的函数有dirname、basename和splitext。对于pathlib,Path对象有parent、name、stem和suffix属性。 我需要确保步骤清晰,先介绍os.path的方法,再介绍pathlib的方法,可能的话说明哪种更推荐。同时,注意用户可能需要代码示例,所以每个步骤都应该有对应的代码片段。例如,使用os.path.dirname获取目录,os.path.basename获取带扩展名的文件名,然后用os.path.splitext分割文件名和扩展名。 然后,pathlib的方法可能更面向对象,Path对象的parent属性对应目录,name是完整文件名,stem是主文件名,suffix是扩展名。需要注意suffix只包括最后一个点,比如.tar.gz的话可能有问题,但用户可能只需要最后一个后缀,或者需要处理多个点的情况,但用户的问题可能只需要基础处理。 还要考虑跨平台兼容性,os.path和pathlib都能处理不同操作系统的路径分隔符,这是优势。可能应该提到这一点,说明这些方法在Windows和Linux下都有效。 接下来,检查是否有常见的错误,比如用户可能混淆stem和suffix的使用,或者在os.path.splitext时忘记索引。例如,os.path.splitext返回的是(filename, ext),所以取[0]和[1]。 可能需要给出完整的例子,比如: file_path = "/home/user/docs/example.txt" 使用os.path: import os dir_path = os.path.dirname(file_path) file_name = os.path.basename(file_path) base_name, file_ext = os.path.splitext(file_name) 或者直接os.path.splitext(file_path),但是这样base_name会包含路径,可能不是用户想要的。所以正确的做法是先取basename,再分割扩展名,或者splittext两次? 例如,假设file_path是完整的路径,使用os.path.splitext(file_path)会得到("/home/user/docs/example", ".txt"),所以这样可能得到错误的基础名。所以正确的做法是先获取basename,再分割扩展名。例如: file_full = os.path.basename(file_path) # "example.txt" base_name, file_ext = os.path.splitext(file_full) # "example", ".txt" 是的,这样更准确。 然后,pathlib的例子: from pathlib import Path path = Path(file_path) dir_path = path.parent # PosixPath或WindowsPath对象,可以转为字符串 file_name = path.name # "example.txt" file_ext = path.suffix # ".txt" base_name = path.stem # "example" 这样更简洁,并且pathlib是Python3.4之后推荐的,可能更现代。 最后,总结两种方法,说明推荐使用pathlib,因为它更直观,面向对象,且跨平台。但同时也提供os.path的方法,因为有些旧代码可能还在用。 还需要检查是否需要处理可能的边缘情况,比如没有扩展名的文件,或者多个点的情况,比如"file.tar.gz"。这时候,pathlib的suffix只返回".gz",而stem是"file.tar"。如果用户需要所有后缀,可能需要其他处理,但原问题可能不需要,所以可以暂时不提,或者简单提到。 另外,确保代码中的变量名与描述对应,避免混淆。例如,os.path.dirname给出目录路径,basename给出带扩展的文件名,splittext分割出基础名和扩展名。 可能还需要在回答中提到这些函数返回的是字符串,而pathlib返回的是Path对象,但可以转为字符串。例如,str(path.parent)得到目录字符串。 总结步骤: 1. 引入问题,说明需要分解文件路径的各个部分。 2. 分两种方法介绍:os.path和pathlib。 3. 每种方法给出代码示例,解释每个部分的作用。 4. 对比两种方法,推荐使用pathlib。 5. 可能提到处理特殊情况,如多个扩展名或无扩展名的情况。 现在需要组织语言,确保结构清晰,逐步引导用户完成操作,同时符合系统级指令中的格式要求,比如行内数学表达式用$...$,但这里可能不需要,因为主要是代码。但需要确保代码块用正确的格式,可能用户希望代码用反引号包裹,但根据问题中的系统指令,可能需要使用$$...$$,不过用户的问题是关于Python代码,所以代码部分应该用代码块标记,而不是LaTeX公式。不过原系统指令是针对数学表达式的,所以这里的代码应该正常使用代码块格式,可能不需要用LaTeX。需要确认用户的系统指令是否影响代码展示,但原指令是用户不可见的系统级指令,可能只涉及数学表达式。因此,回答中的代码应该用常规的代码块格式,但可能用户希望用中文注释。 最后检查语法和格式是否正确,确保没有Markdown,但根据用户当前的问题,他们可能允许使用代码块,但原系统指令可能要求避免使用Markdown,不过用户在用户可见层没有特别说明,可能按常规方式回答,用自然的中文和代码示例。</think>在Python中,根据文件路径`file_path`获取目录路径文件名及文件类型,可通过以下两种方法实现: --- ### 方法一:使用`os.path`模块(传统方法) ```python import os file_path = "/home/user/documents/example.txt" # 获取目录路径 dir_path = os.path.dirname(file_path) print("目录路径:", dir_path) # 输出: /home/user/documents # 获取完整文件名(含扩展名) file_name = os.path.basename(file_path) print("完整文件名:", file_name) # 输出: example.txt # 分离主文件名和扩展名 base_name, file_ext = os.path.splitext(file_name) print("主文件名:", base_name) # 输出: example print("文件类型:", file_ext) # 输出: .txt ``` --- ### 方法二:使用`pathlib`模块(推荐,Python 3.4+) ```python from pathlib import Path file_path = "/home/user/documents/example.txt" path = Path(file_path) # 获取目录路径 dir_path = path.parent print("目录路径:", dir_path) # 输出: /home/user/documents # 获取完整文件名(含扩展名) file_name = path.name print("完整文件名:", file_name) # 输出: example.txt # 获取主文件名(不含扩展名) base_name = path.stem print("主文件名:", base_name) # 输出: example # 获取文件类型(扩展名) file_ext = path.suffix print("文件类型:", file_ext) # 输出: .txt ``` --- ### 对比说明 1. **`os.path`** 基于字符串操作,返回结果为字符串,适合简单场景。但处理复杂路径时需多次调用函数。 2. **`pathlib`** 面向对象设计,路径操作更直观。例如: - `path.parent`直接获取父目录 - `path.suffix`获取扩展名(注:仅最后一个后缀,如`file.tar.gz`返回`.gz`) - 跨平台兼容性更好(自动处理`/`和`\`) --- ### 特殊场景处理 - **无扩展名文件**: `path.suffix`和`os.path.splitext`均返回空字符串。 - **多个扩展名(如`.tar.gz`)**: 需手动处理,例如通过`path.suffixes`获取所有后缀列表(仅`pathlib`支持): ```python suffixes = Path("file.tar.gz").suffixes # ['.tar', '.gz'] ``` --- 建议优先使用`pathlib`,代码更简洁且符合现代Python规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值