问题描述
我正在寻找一种通过 GoLang 或 Javascript 或其他一些不需要用户进行其他额外安装的语言来读取羽毛文件的方法。
我的目标是提供一个用户界面来读取羽毛 csv 文件并将其转换回人类可读的 csv。但是我找不到太多关于如何解决它的资源。
import pandas as pd
import datetime
import numpy as np
import pyarrow.feather as feather
# Create a dummy dataframe
todays_date = datetime.datetime.Now().date()
index = pd.date_range(todays_date-datetime.timedelta(10),periods=10,freq='D')
columns = ['A','B','C']
df = pd.DataFrame(index=index,columns=columns)
df = df.fillna(0) # with 0s rather than NaNs
feather.write_feather(df,'test_feather.csv')
提前致谢。
解决方法
Javascript 包 apache-arrow
附带了一个脚本来完成这个任务。您可以在此处找到脚本的来源:https://github.com/apache/arrow/blob/master/js/bin/arrow2csv.js
如果它没有完全按照您的要求执行,脚本应该作为如何使用 API 读取羽毛文件的示例。
,感谢@Pace 的提示。结果我发现我可以简单地使用 arrow.Table.from([arrow])
函数将 .feather 文件转换为 csv。
对于那些遇到相同问题的人,您可以找到以下代码以供参考。
const apArrow = require('apache-arrow');
const fs = require('fs');
const outputDir = 'output/feather';
const writeIntoFile = (data) => {
fs.appendFileSync(`${outputDir}/test_feather.csv`,data,function (err) {
if (err) return console.log(err);
});
};
const readDataFromRow = (fields,row) => {
return fields
.map((f) => row.get(f))
.join(',');
};
const arrowReader = (filePath) => {
console.log('filePath',filePath);
const arrow = fs.readFileSync(filePath);
const table = apArrow.Table.from([arrow]);
const columns = table.schema.fields.map((f) => f.name);
let buf = columns.join(',') + '\n';
for (let i = 0; i < table.count(); i++) {
const rowData = readDataFromRow(columns,table.get(i));
buf += `${rowData}\n`;
// export to csv every 10000 rows
if (i % 10000 === 0) {
writeIntoFile(buf);
buf = '';
if (i > 0) {
break;
}
}
}
writeIntoFile(buf);
};