python读取文件名称生成list

本文介绍了一种使用Python批量读取指定目录下所有图像文件的方法,并将文件名以CSV格式保存。通过递归遍历子目录,确保了所有符合条件的图像文件都被包含。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

经常需要读取某个文件夹下所有的图像文件。
我使用python写了个简单的代码,读取某个文件夹下某个后缀的文件,将文件名生成为文本(csv格式)

import fnmatch
import os
import pandas as pd
import numpy as np  
import sys

InputStra = sys.argv[1]
InputStrb = sys.argv[2]

def ReadSaveAddr(Stra,Strb):
    #print(Stra)
    #print(Strb)
    print("Read :",Stra,Strb)
    a_list = fnmatch.filter(os.listdir(Stra),Strb)
    print("Find = ",len(a_list))
    df = pd.DataFrame(np.arange(len(a_list)).reshape((len(a_list),1)),columns=['Addr'])  
    df.Addr = a_list
    #print(df.head())
    df.to_csv('Get.lst',columns=['Addr'],index=False,header=False)
    print("Write To Get.lst !")

ReadSaveAddr(InputStra,InputStrb)

上面代码保存为:GetLst.py
使用时:
在cmd窗口输入:

python GetLst.py F:/train/pos *.png

发现上面代码不能深入到下一层目录,又做了点修改:

def ReadSaveAddr2(Stra,Strb):
    df = pd.DataFrame(np.arange(0).reshape(0,1),columns=['Addr']) 
    print(df)
    path = InputStra
    for dirpath,dirnames,filenames in os.walk(path):
        #for filename in filenames:
        a_list = fnmatch.filter(os.listdir(dirpath),Strb)
        if len(a_list):
            dft = pd.DataFrame(np.arange(len(a_list)).reshape((len(a_list),1)),columns=['Addr'])  
            dft.Addr = a_list
            dft.Addr = dirpath + '\\' + dft.Addr#输出绝对路径
            frames = [df,dft]
            df = pd.concat(frames)
            print(df.shape)
    df.to_csv('Get.lst',columns='Addr'],index=False,header=False)
    print("Write To Get.lst !")
<think>我们正在处理用户关于Python读取MAT文件后生成的数据结构类型的问题。根据提供的引用内容,特别是引用[2]和引用[3],我们可以总结如下:1.使用`scipy.io.loadmat`函数读取MAT文件后,返回的数据结构是一个字典(dict)。2.这个字典的键(key)是MAT文件中保存的变量名,值(value)是对应的数据。3.数据在Python中的表示:MATLAB中的数值数组会被转换为numpy数组,而cell数组会被转换为嵌套列表(listoflists)。4.对于结构体(struct)数组,在Python中会转换为一个结构化的numpy数组,其字段名对应结构体的字段名,每个字段的数据也是numpy数组。此外,引用[1]给出了一个具体例子:读取一个包含结构体'eeg'的MAT文件,然后通过字典访问该结构体,再通过索引来获取结构体中的各个字段。具体步骤:-使用`data=scipy.io.loadmat('file.mat')`加载,`data`是一个字典。-通过`data['变量名']`获取该变量,如果变量是结构体,则获取的是一个numpy的ndarray,其dtype是结构化的,可以通过`.dtype.names`获取字段名。-然后通过索引访问结构体数组中的元素和字段。例如,在引用[1]中:```pythonimportscipy.iodata=scipy.io.loadmat('S1.mat')eegdata=data['eeg']#eegdata是一个结构化的numpy数组print(eegdata.dtype.names)#打印结构体的字段名#访问第一个字段的第一个元素(注意:MATLAB结构体在Python中表示为一个二维数组,索引方式为[0,0])r=eegdata[0,0]['field_name']#或者通过索引位置:eegdata[0,0][0]```因此,我们可以回答用户:Python读取MAT文件后生成的数据结构是一个字典(dict),其中每个键对应MAT文件中的一个变量名。而变量的具体类型可能是:-数值数组:转换为numpy.ndarray-结构体:转换为numpy的结构化数组(structuredarray)-元胞数组(cellarray):转换为嵌套列表(listoflists)-其他类型(如字符数组)也会相应转换。同时,引用[2]提到,为了简化,loadmat函数会压缩单元素数组,例如,MATLAB中一个1x1的矩阵在Python中可能被转换为一个标量(但通常还是numpy数组,除非使用`squeeze_me=True`参数)。所以,我们给用户的回答可以这样组织:1.总体数据结构是字典。2.字典中的值根据MATLAB变量的类型转换为不同的Python对象。另外,用户可能需要知道如何进一步处理这些数据,我们可以根据引用内容提供一些基本操作。最后,按照要求,生成相关问题。</think>### Python 读取 MAT 文件后的数据结构类型 在 Python 中通过 `scipy.io.loadmat()` 读取 MATLAB 的 .mat 文件后,**返回的数据结构始终是字典(dict)类型**。该字典的键值对结构如下: 1. **键(key)** 对应 MATLAB 文件中的变量名称(字符串类型)。例如: ```python data.keys() # 输出:dict_keys(['__header__', '__version__', '__globals__', 'eeg', 'node']) ``` 2. **值(value)** 根据 MATLAB 变量的原始类型转换为 Python 对象: - **数值数组** → `numpy.ndarray` 例如:MATLAB 矩阵 `A = [1,2;3,4]` 在 Python 中为 `np.array([[1,2],[3,4]])` - **结构体(struct)** → 结构化 `numpy.ndarray` 访问字段需通过索引: ```python eegdata = data['eeg'] # 获取结构体 field_names = eegdata.dtype.names # 查看字段名 field_data = eegdata[0][0][0] # 访问第一个字段的数据 [^1] ``` - **元胞数组(cell)** → 嵌套列表(list of lists) 例如:`cell_array = [[1, 'a'], [2.5, [3,4]]]` [^2] - **单元素数组** → 自动解压缩为标量(int/float/str) 例如:MATLAB 单值变量 `x=5` 在 Python 中直接为整数 `5` [^2] 3. **特殊键** 字典包含三个元数据键(均以下划线开头): - `__header__`:MATLAB 文件头(字节串) - `__version__`:MAT 文件版本号(字符串) - `__globals__`:全局变量列表(通常为空列表) #### 操作示例 ```python import scipy.io # 读取 MAT 文件 → 返回字典 data = scipy.io.loadmat('data.mat') # type: dict # 提取数值数组变量 matrix = data['node'] # type: numpy.ndarray # 提取结构体并访问字段 eeg = data['eeg'] # 结构化数组 eeg_field1 = eeg[0,0][0] # 第一个字段数据 [^1] eeg_field2 = eeg[0,0][1] # 第二个字段数据 [^1] # 转换为 pandas DataFrame (可选) import pandas as pd df = pd.DataFrame(data['signal_data']) ``` > **关键特性**:MATLAB 的结构体在 Python 中被转换为 *二维结构化数组*,需通过 `[行,列]['字段名']` 或 `[行][列][字段索引]` 访问具体数据 [^1][^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值