python 读取csv报错UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0x87 in position 0: invalid start

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)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值