相关文章推荐
温柔的铁板烧  ·  Exchange ...·  2 月前    · 
精明的山寨机  ·  c++ vector截取部分-掘金·  2 年前    · 
首发于 程序语言

Python/Matlab/C++获取文件夹下所有文件路径(并批量移动)

Python

用途:最近尝试深度学习分类,为了导出模型识别出的每类数据到指定文件夹,于是遇到了这个问题,解决方法如下:

(1)达到效果:

原文件所在路径:

移动后:

(2)代码:

import os
import shutil
OriPath = r'H:\MoveFileTest\01' #需要遍历的文件夹
for root, dirs, files in os.walk(OriPath, topdown=False):
    for name in files:
        print(os.path.join(root, name))
        filepath=os.path.join(root, name)
        path1="F://ReceiveFileTest" #存放文件的文件夹
        movepath=os.path.join(path1,name)
        shutil.copyfile(filepath,movepath) 


(3)代码解析:

1)遍历文件夹下所有文件(包括子文件夹),得到所有文件名称:

2)移动文件用 shutil.copyfile(filepath,movepath) ,注:需要import shutil

filepath:文件存放路径
movepath:指定移动文件夹

对于movepath,不仅要给出需移动到的文件夹路径,还要加上移动的文件名称,如我们需要将文件 0008_0.asc 移动到F:\ReceiveFileTest,对于movepath应该带入:

F://ReceiveFileTest// 0008_0.asc,而不是 F://ReceiveFileTest

因此,代码中采用了文件拼接的方式:

path1="F://ReceiveFileTest"
movepath=os.path.join(path1, name) #movepath:指定移动文件夹

其中name就是文件名称: 0008_0.asc,从而movepath为: F://ReceiveFileTest// 0008_0.asc

Matlab

参考: 通过MATLAB获取文件夹下所有文件名称_yunqianrui的博客-CSDN博客_matlab 读取文件夹下所有文件名

AidDir = uigetdir(); 	% 通过交互的方式选择一个文件夹
if AidDir == 0 			% 用户取消选择
    fprintf('Please Select a New Folder!\n');
    file_name = [AidDir,'\**\*.wav']; %提取指定扩展名的文件。
    %file_name = [AidDir,'\**\*.*']; %用于提取所有文件
    RawFile = dir(file_name);
    AllFile = RawFile([RawFile.isdir]==0);
    if isempty(fieldnames(AllFile))
        fprintf('There are no files in this folder!\n');
    else	% 当前文件夹下有文件,反馈文件数量




    

        fprintf('Number of Files: %i \n',size(AllFile,1));
fileNames=[];
Folder = {AllFile.folder};
Name = {AllFile.name};
for i=1:length(AllFile)
    fileNames = [Folder{i},'\',Name{i}];%每个文件对应路径
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    % 读取,处理操作
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
end

C++

获取文件夹下所有文件名路径

参考: 利用C++实现获取文件夹下所有文件名_C 语言_脚本之家

/*
 @author:CodingMengmeng
 @theme:获取指定文件夹下的所有文件名
 @time:2017-1-13 11:46:22
 @blog:http://www.cnblogs.com/codingmengmeng/
#include <io.h>  
#include <iostream>  
#include <vector>  
using namespace std;
//输入path: 要遍历搜索的文件夹
//输出files:文件夹下所有文件路径;
void getFiles(string path, vector<string>& files)
    //文件句柄  
    long   hFile = 0;
    //文件信息,声明一个存储文件信息的结构体  
    struct _finddata_t fileinfo;
    string p;//字符串,存放路径
    if ((hFile = _findfirst(p.assign(path).append("\\*").c_str(), &fileinfo)) != -1)//若查找成功,则进入
            //如果是目录,迭代之(即文件夹内还有文件夹)  
            if ((fileinfo.attrib & _A_SUBDIR))
                //文件名不等于"."&&文件名不等于".."
                //.表示当前目录
                //..表示当前目录的父目录
                //判断时,两者都要忽略,不然就无限递归跳不出去了!
                if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
                    getFiles(p.assign(path).append("\\").append(fileinfo.name), files);
            //如果不是,加入列表  
                files.push_back(p.assign(path).append("\\").append(fileinfo.name));
        } while (_findnext(hFile, &fileinfo) == 0);
        //_findclose函数结束查找
        _findclose(hFile);
int main() {
    const char* filePath = "E:\\LPT\\";//自己设置目录
    vector<string> files;
    //获取该路径下的所有文件
    getFiles(filePath, files);
    //char str[30];
    int size = files.size();
    for (int i = 0; i < size; i++)
        cout << files[i].c_str() << endl;//文件路径

获取文件夹下指定后缀名文件路径

//输入path: 要遍历搜索的文件夹 file_extension:要搜索的文件名后缀
//输出files:文件夹下所有文件路径;
void getFiles(string path, vector<string>& files, const std::string& file_extension)
	//文件句柄  
	long   hFile = 0;
	//文件信息,声明一个存储文件信息的结构体  
	struct _finddata_t fileinfo;
	string p;//字符串,存放路径
	string combine = "\\*" + file_extension;
	if ((hFile = _findfirst(p.assign(path).append(combine).c_str(), &fileinfo)) != -1)//若查找成功,则进入
			//如果是目录,迭代之(即文件夹内还有文件夹)  
			if ((fileinfo.attrib & _A_SUBDIR))
				//文件名不等于"."&&文件名不等于".."
				//.表示当前目录
				//..表示当前目录的父目录
				//判断时,两者都要忽略,不然就无限递归跳不出去了!
				if (strcmp(fileinfo.name, ".") != 0 && strcmp(fileinfo.name, "..") != 0)
					getFiles(p.assign(path).append("\\").append(fileinfo.name), files, ".wav");
			//如果不是,加入列表  
				files.push_back(p.assign(path).append("\\").append(fileinfo.name));
		} while (_findnext(hFile, &fileinfo) == 0);
		//_findclose函数结束查找
		_findclose(hFile);
int main() {
    const char* filePath = "E:\\LPT\\";//自己设置目录
    vector<string> files;
    //获取该路径下的所有文件
    getFiles(filePath, files, ".wav");//获取该路径下的wav格式的所有文件
    //char str[30];
    int size = files.size();
    for (int i = 0; i < size; i++)
        cout << files[i].c_str() << endl;//文件路径

循环读写txt文件

参考: C++读入txt,写入txt,循环读入txt,循环写入txt_知识在于分享的博客-CSDN博客_c++循环写入txt

//string:存/写数据的txt文件路径
// content:要写入的数据
//cover: true为覆盖,false为接着写
void write_txt(string name, string content, bool cover) {
	ofstream write(name, cover ? ios::trunc : ios::app);
	if (write.is_open())
		write << content << endl;
		write.close();
//例子: