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();
//例子: