1.28目录遍历函数

/*
    //打开一个目录
    #include <sys/types.h>
    #include <dirent.h>
    DIR *opendir(const char *name);
        参数:
            -name:需要打开的目录的名称
        返回值:
            -Dir * 类型,理解为目录流
            错误返回NULL
    
    //读取目录中的数据
    #include <dirent.h>
    struct dirent *readdir(DIR *dirp);
        参数:dirp是opendir返回的结果
        返回值:
            struct dirent:代表读取到的文件的信息
            读取到了末尾或者失败了,返回NULL
    
    //关闭目录
    #include <sys/types.h>
    #include <dirent.h>
    int closedir(DIR *dirp);

*/
#include <sys/types.h>
#include <dirent.h>
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
int getFileNum(const char * path);
//读取某个目录下所有的普通文件的个数
int main(int argc,char *argv[])//argc: 整数,用来统计你运行程序时送给main函数的命令行参数的个数  * argv[ ]: 指针数组,用来存放指向你的字符串参数的指针,每一个元素指向一个参数。其中argv[0] 指向程序运行的全路径名,argv[1] 指向在DOS命令行中执行程序名后的第一个字符串,argv[2] 指向执行程序名后的第二个字符串,argv[argc]为NULL。
{
    if(argc<2){
        printf("%s path\n",argv[0]);
        return -1;
    }
    int num=getFileNum(argv[1]);

    printf("普通文件的个数为:%d\n",num);
    return 0;
}

//用于获取目录下所有普通文件的个数
int getFileNum(const char * path){
    //打开目录
    DIR * dir = opendir(path);
    if(dir==NULL){
        perror("opendir");
        exit(0);
    }

    struct  dirent *ptr;
    
    //记录普通文件的个数
    int total=0;
    
    while((ptr=readdir(dir))!=NULL){
        //获取名称
        char * dname = ptr->d_name;

        //忽略掉.和..
        if(strcmp(dname,".")==0||strcmp(dname,"..")==0){
            continue;
        }

        //判断是否是普通文件还是目录
        if(ptr->d_type==DT_DIR){
            //目录,需要继续读取这个目录
            char newpath[256];
            sprintf(newpath,"%s/%s",path,dname);
            total+=getFileNum(newpath);
        }
        if(ptr->d_type==DT_REG){
            //普通文件
            total++;
        }
    }
    //关闭目录
    closedir(dir);

    return total;
}

基于以下代码,不要改变其逻辑和目的,将其修改得更加灵活。例如直接抓path = r’D:\Users\x00197\Desktop\SRAM_Result_data中存在的log文件名中按照下划线拆分,得到r’D:\Users\x00197\Desktop\SRAM_Result_data\第一个元素\第二个元素,将以下代码修改为一个def函数,方便引用 import pandas as pd import Config import os import Plot_map import matplotlib.pyplot as plt import seaborn as sns import numpy as np from scipy import stats path = r’D:\Users\x00197\Desktop\SRAM_Result_data\AE0095.041\13’ LotID = ‘AE0095.041’ WaferID = ‘09’ Scramble_path = f’{path}/02_Test_Pattern’ def get_filenames(directory): filenames = os.listdir(directory) return filenames files = get_filenames(f’{Scramble_path}') wafer = pd.read_csv(‘55_wafermap.csv’) wafer = pd.read_csv(r"D:\Users\x00708\SRAM_Classification-242终极版\55_wafermap.csv") data = [] for ind in wafer.index: Die_X = wafer[‘Die_X’][ind] Die_Y = wafer[‘Die_Y’][ind] num1 = 0 num2 = 0 for file in files: if Die_X == int(file.split('_')[0]) and Die_Y == int(file.split('_')[1]): if 'normal_r' in file: if float(file.split('_')[6]) > num1: num1 = float(file.split('_')[6]) if 'normal_w' in file: if float(file.split('_')[6]) > num2: num2 = float(file.split('_')[6]) if not (num1 == 0 and num2 == 0): data.append([Die_X, Die_Y, num1, num2]) # 每个die在read/write时fail的最高电压(也可以是pass的最低电压,pass未显示) data = pd.DataFrame(data) data.columns = [‘Die_X’, ‘Die_Y’, ‘W’, ‘R’] data[‘R’] = data[‘R’] + 0.02 # ?为啥+0.02 data[‘W’] = data[‘W’] + 0.02 data.to_csv(f’{path}/R_W.csv’) data_sorted1 = np.sort(data[data[‘R’] < 1.32][‘R’]) # 取R列<1.32时的R列的值并排序 将序列中的每个值除以数据点总数,序列中的值是长度/数值的数量,并非以data里的具体数值来除,该除表示小于data里具体数值的概率 cdf1 = np.arange(1, len(data_sorted1) + 1) / len(data_sorted1) # cdf1是一个数组,表示每个数据点对应的累积概率 cdf_nor1 = stats.norm.ppf(cdf1) # 标准化/归一化 data_sorted2 = np.sort(data[data[‘W’] < 1.32][‘W’]) print(data_sorted2) cdf2 = np.arange(1, len(data_sorted2) + 1) / len(data_sorted2) cdf_nor2 = stats.norm.ppf(cdf2) data = np.array([0.0001, 0.001, 0.1, 0.5, 0.10, 0.20, 0.30, 0.40, 0.50, 0.60, 0.70, 0.80, 0.90, 0.95, 0.99, 0.999, 0.9999]) data = np.array([0.01, 0.1, 0.30, 0.50, 0.70, 0.90, 0.99]) xtick = [0.68,0.72,0.76,0.8,0.84,0.88,0.92,0.96,1.0,1.04,1.08,1.12,1.16,1.2,1.24,1.28,1.32,1.36] normalized_data = stats.norm.ppf(data) print(normalized_data) tick = [] for i in range(len(data)): tick.append(str(data[i] * 100) + ‘%’) plt.figure(figsize=(10, 6)) plt.plot(data_sorted1, cdf_nor1, marker=‘.’, linestyle=‘-’, color=‘green’, label=‘Read’) plt.plot(data_sorted2, cdf_nor2, marker=‘.’, linestyle=‘-’, color=‘orange’, label=‘Write’) plt.plot(data_sorted, cdf, marker=‘.’, linestyle=‘none’, color=‘green’) plt.title(‘AE0095#13 R/W Fail CDF’) plt.xlim(0.68, 1.34) plt.yticks(normalized_data, tick) plt.xticks(xtick, xtick) plt.xlabel(‘Voltage’) plt.ylabel(‘CDF’) plt.legend() plt.grid(True) plt.savefig(f’{path}/R_W.jpg’, dpi=200) plt.close() plt.show() # 示例数据 print(normalized_data) # sns.scatterplot(x=data, y=normalized_data) # plt.show()
最新发布
12-03
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值