开发者社区 > 云存储 > 对象存储OSS > 正文

python sdk中的append_object方法支持追加上传xls文件吗

我是将df类型的数据写进xls文件,发现只有第一次写入的时候数据成功的写入,第二次往里面追加数据的时候也没有报错,文件的大小也增加了,但是就是看不到追加的数据

展开
收起
游客pbhtteitiak5e 2023-08-23 15:03:15 111 0
4 条回答
写回答
取消 提交回答
  • 天下风云出我辈,一入江湖岁月催,皇图霸业谈笑中,不胜人生一场醉。

    最好是csv文件,xls文件不好试用,对数据类型转换也带不上去,也可以用python追加上传是指通过AppendObject方法在已上传的追加类型文件(Appendable Object)末尾直接追加内容。
    本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见访问域名和数据中心。
    本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见Python初始化。
    要追加上传,您必须有oss:PutObject权限。具体操作,请参见为RAM用户授权自定义的权限策略。
    当文件不存在时,调用AppendObject接口会创建一个追加类型文件。
    当文件已存在时:
    如果文件为追加类型文件,且设置的追加位置和文件当前长度相等,则直接在该文件末尾追加内容。
    如果文件为追加类型文件,但是设置的追加位置和文件当前长度不相等,则抛出PositionNotEqualToLength异常。
    如果文件为非追加类型文件时,例如通过简单上传的文件类型为Normal的文件,则抛出ObjectNotAppendable异常。
    追加类型文件暂不支持CopyObject操作。
    image.png

    2023-08-24 15:14:39
    赞同 展开评论 打赏
  • 根据你的描述,可能是append_object方法并不直接支持追加上传XLS文件。因为一般来说,append_object方法主要是用来添加新的对象到已有的对象列表中,而不是直接更新现有的对象。

    然而,这个问题也有解决的可能。一种解决方案是你可以在每次追加新数据之前,先清空原来的XLS文件,然后再重新保存你的DataFrame数据。这样虽然比较麻烦,但至少能保证每次都能成功追加数据。

    另一种解决方案是寻找其他适合的Python库来处理XLS文件的追加操作。比如,你可以尝试使用openpyxl库来读取和写入XLS文件,并且它还支持直接追加数据到已有的工作簿中。具体的使用方法,你可以参考官方文档:https://openpyxl.readthedocs.io/en/stable/
    image.png

    还有一种解决方案是使用pandas库来生成新的XLS文件,而不是直接追加数据到已有的工作簿中。具体的方法如下:

    import pandas as pd
    
    # 假设你的原始数据是一个DataFrame
    data = {'col1': [1, 2, 3], 'col2': ['a', 'b', 'c']}
    df = pd.DataFrame(data)
    
    # 将数据转换成XLS文件
    output_file = '/path/to/output/file.xls'
    df.to_excel(output_file, index=False)
    

    image.png

    这种方法的好处是可以让你完全控制生成的XLS文件的结构和内容,同时也能避免因追加数据失败导致的意外情况。

    2023-08-24 09:01:01
    赞同 展开评论 打赏
  • 十分耕耘,一定会有一分收获!

    楼主你好,阿里云python sdk中的append_object方法支持追加上传xls文件。

    您的问题可能是因为您使用的xlwt库无法支持追加向已存在的xls文件中写入数据。要支持向已存在xls文件中追加数据,您可以使用openpyxl库来打开xls文件并写入数据。

    以下是使用openpyxl库向已存在的xls文件追加数据的示例代码:

    from openpyxl import load_workbook
    import pandas as pd
    
    # 读入已存在的xls文件
    file_path = 'your_file_path.xlsx'
    book = load_workbook(file_path)
    
    # 选择要追加数据的工作表
    writer = pd.ExcelWriter(file_path, engine='openpyxl')
    writer.book = book
    writer.sheets = dict((ws.title, ws) for ws in book.worksheets)
    
    # 读入要追加的数据
    new_data = pd.read_excel('your_new_data.xls')
    
    # 将新数据写入xls文件
    new_data.to_excel(writer, sheet_name='your_sheet_name', index=False, header=False, startrow=writer.sheets['your_sheet_name'].max_row)
    
    writer.save()
    

    此代码将读入已存在的xls文件,选择要追加数据的工作表,并使用pd.ExcelWriter打开文件以支持向其追加数据。然后,读入要追加的数据并使用to_excel方法将其写入文件中特定的工作表。最后,使用writer.save()保存文件并关闭pd.ExcelWriter。

    请注意,使用openpyxl库向xls文件中追加数据的效率较低,尤其是对于较大的数据集。如果您需要频繁地向已存在的xls文件中追加数据,建议考虑使用其他格式,例如CSV或Parquet等,或使用数据库。

    2023-08-24 08:37:59
    赞同 展开评论 打赏
  • CSDN全栈领域优质创作者,万粉博主;InfoQ签约博主;华为云享专家;华为Iot专家;亚马逊人工智能自动驾驶(大众组)吉尼斯世界纪录获得者

    是的,Python SDK中的append_object方法支持追加上传xls文件。可以通过将xls文件作为参数传递给append_object方法来实现追加上传。

    2023-08-23 15:45:52
    赞同 1 展开评论 打赏

对象存储 OSS 是一款安全、稳定、高性价比、高性能的云存储服务,可以帮助各行业的客户在互联网应用、大数据分析、机器学习、数据归档等各种使用场景存储任意数量的数据,以及进行任意位置的访问,同时通过丰富的数据处理能力更便捷地使用数据。

热门讨论

热门文章

相关电子书

更多
Python第四讲——使用IPython/Jupyter Notebook与日志服务玩转超大规模数据分析与可视化 立即下载
Improving Python and Spark 立即下载
一个跨平台的云服务SDK需要什么 立即下载