csv格式转hdf5格式
时间: 2023-10-12 14:05:07 浏览: 142
要将CSV格式转换为HDF5格式,可以使用Python中的Pandas和HDF5库。下面是一个简单的Python代码示例:
```python
import pandas as pd
# 读取CSV文件
df = pd.read_csv('data.csv')
# 将数据保存为HDF5文件
df.to_hdf('data.h5', key='data')
```
在上面的代码中,我们首先使用Pandas读取CSV文件。接下来,我们使用`to_hdf()`方法将数据保存为HDF5文件。该方法需要两个参数:文件名和数据键。在本例中,我们将数据键设置为`data`。
请注意,HDF5是一种高效的数据存储格式,可以处理大型数据集。因此,如果您的CSV文件非常大,则HDF5可能是更好的选择。
相关问题
用Qt C++写一个csv格式转hdf5格式的代码
下面是一个简单的Qt C++代码,用于将CSV文件转换为HDF5格式。这个代码使用了HDF5 C++库(http://www.hdfgroup.org/HDF5/release/cpplus/),你需要先下载并安装该库。
```cpp
#include <QtCore/QCoreApplication>
#include <iostream>
#include <fstream>
#include <vector>
#include "H5Cpp.h"
using namespace H5;
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// Check for the correct number of command line arguments
if (argc != 3)
{
std::cerr << "Usage: " << argv[0] << " input_file.csv output_file.h5" << std::endl;
return 1;
}
// Open the CSV file
std::ifstream infile(argv[1]);
// Read the CSV data into a vector of vectors
std::vector<std::vector<double>> data;
std::string line;
while (std::getline(infile, line))
{
std::vector<double> row;
std::stringstream ss(line);
std::string cell;
while (std::getline(ss, cell, ','))
{
row.push_back(std::stod(cell));
}
data.push_back(row);
}
// Get the dimensions of the data
hsize_t dims[2];
dims[0] = data.size();
dims[1] = data[0].size();
// Create a new HDF5 file
H5File file(argv[2], H5F_ACC_TRUNC);
// Create a new dataset in the file
DataSpace dataspace(2, dims);
DataSet dataset = file.createDataSet("/data", PredType::NATIVE_DOUBLE, dataspace);
// Write the data to the dataset
dataset.write(data.data(), PredType::NATIVE_DOUBLE);
return a.exec();
}
```
这个代码假设CSV文件中所有单元格都是数字,并且以逗号分隔。如果你的CSV文件不符合这个要求,你需要进行必要的修改。
用C++将csv 格式转为hdf5格式
要将csv格式转换为hdf5格式,需要使用C++中的hdf5库。下面是一个简单的示例程序,演示了如何将csv文件转换为hdf5格式。
```c++
#include <iostream>
#include "hdf5.h"
#include <string>
#include <fstream>
using namespace std;
int main(int argc, char* argv[])
{
//打开csv文件
ifstream infile("data.csv");
string line;
//获取csv文件行数和列数
int rows = 0, cols = 0;
while (getline(infile, line))
{
rows++;
int cur_cols = 0;
for (int i = 0; i < line.length(); i++)
{
if (line[i] == ',')
cur_cols++;
}
if (cur_cols > cols)
cols = cur_cols;
}
infile.close();
//创建hdf5文件
hid_t file_id = H5Fcreate("data.h5", H5F_ACC_TRUNC, H5P_DEFAULT, H5P_DEFAULT);
//创建数据集
hsize_t dims[2] = { rows, cols };
hid_t dataspace_id = H5Screate_simple(2, dims, NULL);
hid_t dataset_id = H5Dcreate(file_id, "/data", H5T_NATIVE_DOUBLE, dataspace_id,
H5P_DEFAULT, H5P_DEFAULT, H5P_DEFAULT);
//读取csv文件数据并写入hdf5文件
double* data = new double[rows * cols];
infile.open("data.csv");
int r = 0;
while (getline(infile, line))
{
int c = 0;
int j = 0;
while (j < line.length())
{
int k = j;
while (k < line.length() && line[k] != ',')
k++;
string val = line.substr(j, k - j);
data[r * cols + c] = stod(val);
j = k + 1;
c++;
}
r++;
}
infile.close();
H5Dwrite(dataset_id, H5T_NATIVE_DOUBLE, H5S_ALL, H5S_ALL, H5P_DEFAULT, data);
//释放资源
delete[] data;
H5Sclose(dataspace_id);
H5Dclose(dataset_id);
H5Fclose(file_id);
cout << "Done!" << endl;
return 0;
}
```
这个程序假设csv文件中的每个值都是double类型。如果csv文件中包含其他类型的数据,需要相应地更改代码。
阅读全文