CSV文件的使用-写入/写出(C++/Python)
来源:互联网 发布:数控车床简单的编程 编辑:程序博客网 时间:2024/04/29 14:40
参考:
http://baike.baidu.com/link?url=dFr4aesUK_f_SoTqTL4jQ8DwXAQkxRC5iB3Qkj_nw13j6Nai0HcWzciRmXlUCT5ii_yiWQ3bWlalg8i1mHnO0XLWTesNEkMwSmtpPMRDyUO
#########################################################################
CSV-逗号分隔符(Comma-Separatored Values,有时也可用字符分隔符,分隔字符不一定要使用逗号)
典型分隔符是逗号,分号或制表符
excel表格可以打开csv文件,如果分隔符使用的是逗号的话,表格可以按逗号分隔,但如果不是逗号的话,并不能分隔
新建一个文件test.csv(利用逗号分隔):
hello,worldhai,hi
利用excel表格打开
新建另一个文件test2.csv(利用分号分隔):
hello;worldhai;hi
利用excel表格打开:
并没有按分号分隔
所以如果我们想要读取表格数据时,可以先将表格保存为csv文件,然后利用分隔符','读取表格数据
有时我们想要在数据中使用分隔符这时可以用双引号:
test3.csv:
"adsf,asdfa",323gadfasf,23
test4.csv:
"asdf'asdf',adf",32"ads'asd',af",45
#########################################################33
C++实现
写入CSV文件:
#include <iostream>#include <fstream>#include <sstream>#include <string>#include <vector>#include <io.h>#include <time.h>#include <direct.h>#include <algorithm>using namespace std;//图片地址const char *address="D:\\VSProject\\CSVTest\\CSVTest\\images\\";//csv存储地址const char *csv_addr="D:\\VSProject\\CSVTest\\CSVTest\\images.csv";/** * @function: 获取cate_dir目录下的所有文件名 * @param: cate_dir - const char指针类型 * @result:vector<string>类型*/vector<string> getFiles(const char *cate_dir){vector<string> files;//存放文件名#ifdef WIN32_finddata_t file;long lf;//输入文件夹路径if ((lf=_findfirst(cate_dir, &file)) == -1) {cout<<cate_dir<<" not found!!!"<<endl;} else {while(_findnext(lf, &file) == 0) {//输出文件名//cout<<file.name<<endl;if (strcmp(file.name, ".") == 0 || strcmp(file.name, "..") == 0)continue;files.push_back(file.name);}}_findclose(lf);#endif#ifdef linuxDIR *dir;struct dirent *ptr;char base[1000]; if ((dir=opendir(cate_dir)) == NULL) {perror("Open dir error..."); exit(1); } while ((ptr=readdir(dir)) != NULL){if(strcmp(ptr->d_name,".")==0 || strcmp(ptr->d_name,"..")==0) ///current dir OR parrent dir continue;else if(ptr->d_type == 8) ///file//printf("d_name:%s/%s\n",basePath,ptr->d_name);files.push_back(ptr->d_name);else if(ptr->d_type == 10) ///link file//printf("d_name:%s/%s\n",basePath,ptr->d_name);continue;else if(ptr->d_type == 4) ///dir{files.push_back(ptr->d_name);/* memset(base,'\0',sizeof(base)); strcpy(base,basePath); strcat(base,"/"); strcat(base,ptr->d_nSame); readFileList(base);*/}}closedir(dir);#endif//排序,按从小到大排序sort(files.begin(), files.end());return files;}/** * @function: 将图片信息以及对应ID写入文件,保存为csv格式 * @param: images - const vector<string>类型,图片地址 * @param: labels - const vector<int>类型,图片ID * @param: addr - const char指针类型,存储地址 * @param: separator - char类型,分隔符,默认值为';'*/bool write_csv(const vector<string> images, const vector<int> labels, const char *addr, char separator=';'){ofstream fout(addr);if (!fout.is_open()){cout<<addr<<" could not open "<<endl;return false;}for (int i=0; i<(int)images.size(); i++){fout<<images[i];fout<<separator;fout<<labels[i]<<endl;}fout.close();return true;}int main(){//获取所有类别地址string image_address=(string)address+"*";vector<string> cates=getFiles(image_address.c_str());//图片地址vector<string> images;//图片IDvector<int> labels;for (int i=0; i<(int)cates.size(); i++){//获取类别绝对地址string cate_dir=(string)address+cates[i];//获取图片string cate_addr=cate_dir+"\\*";vector<string> imgs=getFiles(cate_addr.c_str());//判断图片是否存在if ((int)imgs.size() == 0){cout<<cate_dir<<" can not find any images"<<endl;exit(1);}//设置绝对地址for (int j=0; j<(int)imgs.size(); j++){string img_dir=cate_dir+"\\"+imgs[j];images.push_back(img_dir);labels.push_back(i+1);}}time_t start=clock();//制作csv文件write_csv(images, labels, csv_addr);time_t end=clock();double time=(double)(end-start)/CLOCKS_PER_SEC; //计算函数使用时间,以秒计cout<<"write_csv() need time is "<<time<<" s."<<endl;cout<<"end..."<<endl;cin.get();return 0;}
读出CSV文件:
static void read_csv(const string& filename, vector<Mat>& images, vector<int>& labels, char separator = ';') { std::ifstream file(filename.c_str(), ifstream::in); if (!file) { string error_message = "No valid input file was given, please check the given filename."; CV_Error(CV_StsBadArg, error_message); } string line, path, classlabel; while (getline(file, line)) { stringstream liness(line); getline(liness, path, separator); getline(liness, classlabel); if(!path.empty() && !classlabel.empty()) { images.push_back(imread(path, 0)); labels.push_back(atoi(classlabel.c_str())); } }}
#########################################################
python实现
#!/usr/bin/env python#-*- coding: utf-8 -*-'''实现csv文件的读出,写入功能'''__author__ = 'zj'import timeimport os#csv文件写入,默认分隔符是';'#参数csv_name表示存储地址#参数rows_list存储写入内容,是列表类型,每个元素代表一行输入内容,同样是列表类型#例:rows_list=[[23,53,'123'], [434, 3, 'dfgv']]def write_csv(csv_name, rows_list, separator=';'):start=time.clock()#打开文件fi=open(csv_name, 'w')#遍历每一行for row in rows_list:#遍历每一列for col in row:fi.write(str(col))fi.write(separator)#endforfi.write("\n")#endforfi.close()end=time.clock()print 'write_csv function need time :%f s'%(end-start)#end of write_csv#csv文件读出,默认分隔符是';'#参数csv_name表示存储地址#参数rows_list存储写出内容,是列表类型,每个元素代表一行输入内容,同样是列表类型#例:rows_list=[[23,53,'123'], [434, 3, 'dfgv']]def read_csv(csv_name, rows_list, separator=';'):start=time.clock()#打开文件fi=open(csv_name, 'r')#读取每一行for line in fi.readlines():#分隔每一列cols=line.split(separator)rows_list.append(cols)#endforfi.close()end=time.clock()print 'read_csv function need time :%f s'%(end-start)#end of read_csvif __name__ == '__main__':#设置存储地址address=os.path.join(os.getcwd(), "test.csv")#设置存储内容rows_list=[[23,53,'123'], [434, 3, 'dfgv']]#写入csv文件write_csv(address, rows_list, ';')lists=[]#读出csv文件read_csv(address, lists, ';')for line in lists:for param in line:print param+" ",#endforprint#endfor#endif
1 0
- CSV文件的使用-写入/写出(C++/Python)
- 使用Python读取和写入CSV文件
- 使用Python读取和写入CSV文件
- python csv文件写入
- python 写入csv文件
- Python 写入CSV文件
- Python csv文件写入
- Python CSV文件写入错误
- 使用Python读取/导出(写入)CSV文件
- Python用csv写入文件---消除空余行的技巧
- 用python 读取和写入CSV格式的文件
- python写入csv文件的几种方法总结
- Python对于CSV文件的读取与写入
- python写入csv和matlab写入csv的效率对比
- python 读取和写入csv文件
- python中写入csv,excel显示、pandas读取csv文件的编码问题
- MFC文件的写入以及写出????
- python读出mysql数据写出到csv文件中[整理]
- s3c2440学习笔记 MMU
- iOS、OC和Objective-C的区别
- CorePlotSDK使用
- 层次聚类算法之BIRCH(聚类特征树的多阶段聚类)
- 基于Spark的异构分布式深度学习平台
- CSV文件的使用-写入/写出(C++/Python)
- 配置 Log4j 日志
- android 之jni开发步骤
- 解决部分手机RadioButton图片不居中问题
- Android 横屏,竖屏的设置
- 安装pip出现的问题及解决办法
- Java 泛型
- 面试题
- 让latex写论文更方便的几个工具