You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中使用Pandas读取io.BytesIO对象报错的问题求助

问题:Pandas读取Google云端下载文件失败

我是Python新手,正按照谷歌云盘教程实现从云端读取文件的功能,原下载代码如下:

def download_file(real_file_id):

    try:
        service = authorize()
        file_id = real_file_id

        # pylint: disable=maybe-no-member
        request = service.files().get_media(fileId=file_id)
        file = io.BytesIO()
        downloader = MediaIoBaseDownload(file, request)
        done = False
        while done is False:
            status, done = downloader.next_chunk()
            print(F'Download {int(status.progress() * 100)}.')

    except HttpError as error:
        print(F'An error occurred: {error}')
        file = None

    return file.seek(0)

随后尝试用Pandas的read_csv读取文件的代码:

def read_file(item):
    with open(item, 'rb') as file:
        csvreader = pd.read_csv(file.read())
        print(csvreader)


if __name__ == '__main__':
    file = download_file("file_id")
    read_file(file)

确认下载功能正常,但读取时脚本卡住,手动终止后出现错误:

Traceback (most recent call last):
  File "C:\Users\tluce\PycharmProjects\pythonProject\main.py", line 23, in <module>
    read_file(download_file(files[0]['id']))
  File "C:\Users\tluce\PycharmProjects\pythonProject\main.py", line 15, in read_file
    csvreader = pd.read_csv(file)
  File "C:\Users\tluce\PycharmProjects\pythonProject\venv\lib\site-packages\pandas\io\parsers\readers.py", line 912, in read_csv
    return _read(filepath_or_buffer, kwds)
  File "C:\Users\tluce\PycharmProjects\pythonProject\venv\lib\site-packages\pandas\io\parsers\readers.py", line 577, in _read
    parser = TextFileReader(filepath_or_buffer, **kwds)
  File "C:\Users\tluce\PycharmProjects\pythonProject\venv\lib\site-packages\pandas\io\parsers\readers.py", line 1407, in __init__
    self._engine = self._make_engine(f, self.engine)
  File "C:\Users\tluce\PycharmProjects\pythonProject\venv\lib\site-packages\pandas\io\parsers\readers.py", line 1679, in _make_engine
    return mapping[engine](f, **self.options)
  File "C:\Users\tluce\PycharmProjects\pythonProject\venv\lib\site-packages\pandas\io\parsers\c_parser_wrapper.py", line 93, in __init__
    self._reader = parsers.TextReader(src, **kwds)
  File "pandas\_libs\parsers.pyx", line 548, in pandas._libs.parsers.TextReader.__cinit__
  File "pandas\_libs\parsers.pyx", line 637, in pandas._libs.parsers.TextReader._get_header
  File "pandas\_libs\parsers.pyx", line 848, in pandas._libs.parsers.TextReader._tokenize_rows
  File "pandas\_libs\parsers.pyx", line 859, in pandas._libs.parsers.TextReader._check_tokenize_status
  File "pandas\_libs\parsers.pyx", line 2025, in pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError: Error tokenizing data. C error: Calling read(nbytes) on source failed. Try engine='python'.

错误分析与修正

你的代码存在两个关键错误:

1. download_file返回值错误

file.seek(0)的返回值是整数0(表示文件指针移动到开头的位置),而不是你需要的BytesIO文件对象。这导致read_file接收到的是0,而非内存中的文件,后续open(0, 'rb')完全不符合逻辑,直接引发错误。

修正方法:先执行seek(0)重置指针,再返回file对象:

def download_file(real_file_id):
    try:
        service = authorize()
        file_id = real_file_id

        # pylint: disable=maybe-no-member
        request = service.files().get_media(fileId=file_id)
        file = io.BytesIO()
        downloader = MediaIoBaseDownload(file, request)
        done = False
        while done is False:
            status, done = downloader.next_chunk()
            print(f'Download {int(status.progress() * 100)}%.')

    except HttpError as error:
        print(f'An error occurred: {error}')
        file = None

    if file is not None:
        file.seek(0)  # 重置文件指针到开头
    return file

2. read_file处理方式错误

  • BytesIO是内存中的文件对象,不需要用open打开,直接传给pd.read_csv即可。
  • pd.read_csv接受文件类对象(如BytesIO),不需要先调用file.read()把内容读成字节串。

修正后的read_file函数:

import pandas as pd

def read_file(item):
    if item is None:
        print("文件下载失败")
        return
    csvreader = pd.read_csv(item)
    print(csvreader)

主函数调用

确保调用时处理download_file可能返回的None:

if __name__ == '__main__':
    file = download_file("你的文件ID")
    read_file(file)

内容的提问来源于stack exchange,提问作者Tomas Lucena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 04:00:44