pandas 和 csv 读取失败,一种方法是手动另存为时改变编码,以下是代码读取,可以使用https://cdn.jsdelivr.net/npm/xlsx/dist/xlsx.full.min.js 在浏览器上读取,
1. 前端读取
#https://viewer.flyfish.group/
#https://products.aspose.app/cells/zh/editor/csv
#https://products.groupdocs.app/zh/parser/view-text/csv
<!--<script src="http://code.jquery.com/jquery-2.1.4.min.js"></script>-->
<!DOCTYPE html>
<html>
<head>
<title>Excel File Read</title>
<script src="https://cdn.jsdelivr.net/npm/xlsx/dist/xlsx.full.min.js"></script>
</head>
<body>
<input type="file" id="input-excel" />
<div id="excel-data"></div>
<script>
document.getElementById('input-excel').addEventListener('change', function(e) {
var file = e.target.files[0];
var reader = new FileReader();
reader.onload = function(e) {
var data = new Uint8Array(e.target.result);
var workbook = XLSX.read(data, {type: 'array'});
// 假设我们只读取第一个工作表
var firstSheetName = workbook.SheetNames[0];
var worksheet = workbook.Sheets[firstSheetName];
// 将工作表转换为JSON
var json = XLSX.utils.sheet_to_json(worksheet);
document.getElementById('excel-data').innerText = JSON.stringify(json);
};
reader.readAsArrayBuffer(file);
});
</script>
</body>
</html>
2. nodejs 写一个服务,python调用接口
nodejs需要安装两个库 npm install express xlsx express-fileupload -g
const express = require('express');
const fileUpload = require('express-fileupload');
const app = express();
const XLSX = require('xlsx');
app.use(fileUpload());
app.post('/upload', (req, res) => {
if (!req.files || Object.keys(req.files).length === 0) {
return res.status(400).send('No files were uploaded.');
}
// console.log(req.body);
// console.log(req.files);
const body_data = req.body;
var data = req.files.file.data;
const workbook = XLSX.read(data,{ type: 'buffer'});
if (typeof body_data != 'undefined'){
console.log('sheet_name:', body_data.sheet_name)
var sheetName = body_data.sheet_name
}else{
// 获取 Excel 中的第一个工作表
var sheetName = workbook.SheetNames[0];
}
console.log(Object.keys(XLSX.utils))
console.log(workbook.SheetNames);
const worksheet = workbook.Sheets[sheetName];
// 将工作表转换为 JSON
const jsonData = XLSX.utils.sheet_to_json(worksheet);
// console.log(jsonData);
res.status(200).send(jsonData);
// 保存到本地
// let uploadedFile = req.files.file;
// uploadedFile.mv('./uploads/' + uploadedFile.name, function(err) {
// if (err) {
// return res.status(500).send(err);
// }
// res.send('File uploaded!');
// });
});
const PORT = 9315;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
python接口调用
def read_csv_js(): url = 'http://127.0.0.1:9315/upload' file_path = r'C:\Users\administered\Downloads\20240313.csv' file_name = file_path.replace('\\', '//').split('/')[-1] data = {'sheet_name': 'sheet1'} files = {'file': (file_name, open(file_path, 'rb'), 'text/csv')} res = requests.post(url, files=files, data=data) print(res.text) print(res.status_code)