我可以使用Pandas 和Python-GitLab成功地读取这样的CSV:

    filename = "file.csv"
    f = project.files.get(file_path=filename, ref='master')
    data = pd.read_csv(StringIO(str(f.decode(),'utf-8')), sep=',', header=None, names=["direction", "width", "height"])

但我无法将正确的 struct 重新放回JSON中,然后被GitLab读取为CSV.

GitLab文件上的CSV示例如下所示,这样您就可以看到其 struct

import csv, requests
from io import StringIO

url = "https://gitlab.com/datasets_a/mpg-data/-/raw/master/mpg.csv"
# Reading URL data
s = requests.get(url).content
# Decoding & formatting
data=csv.reader(StringIO(s.decode('utf-8')))
#Printing the first 5 rows
for row in list(data)[:5]:
    print(row)

而且我似乎不能简单地将数据帧转换为json--这是我的try !

def make_payload_commit(project, Time, filename, data):
        # payload
        data = {
                'branch': 'main',
                'commit_message': Time,
                'actions': [
                {
                        'action': 'update',
                        'file_path': filename,
                        'content': dataframe.to_json(),
                }
                ]
        }
        commit = project.commits.create(data)

GitLab不会将其注册为CSV.

如果有人知道如何做到这一点,我将非常感激!

推荐答案

很有可能,由于某些编码问题,您的.csv文件无法识别.要解决此问题,您可以通过base64 module使用Base64编码对文件进行编码.

以下是如何使用pandasgithub将您提供的文件内容上载到选定存储库的工作示例:

import pandas as pd
import base64
import requests
import json

url = "https://gitlab.com/datasets_a/mpg-data/-/raw/master/mpg.csv"
# Reading URL data
data_orig = pd.read_csv(url, index_col=0)

# Convert the DataFrame to a CSV string
csv_str = data_orig.to_csv(index=False)

# Encode the CSV string as base64
base64_content = base64.b64encode(csv_str.encode('utf-8')).decode('utf-8')

headers = {
    "Authorization": "Bearer  <YOUR TOKEN>",
    "Accept": "application/vnd.github.v3+json"
}

# Create the request payload
payload = {
    "message": "add new csv file",
    "content": base64_content,
    "branch": "main"
}

# Convert the payload to JSON
json_payload = json.dumps(payload)

# Send the request to create the file
response = requests.put(<REQUEST URL>, headers=headers, data=json_payload)

所得到的文件被上载到玩具储存库here.


通过将操作的encoding属性设置为base64(参见documentation),您应该能够实现相同的VIA gitlab,如下所示:

data = {
        'branch': 'main',
        'commit_message': Time,
        'actions': [
        {
                'action': 'update',
                'file_path': filename,
                'content': base64_content,
                'encoding': 'base64'
        }
        ]
}

希望这能有所帮助.

Python相关问答推荐

在Arrow上迭代的快速方法.Julia中包含3000万行和25列的表

Python Hashicorp Vault库hvac创建新的秘密版本,但从先前版本中删除了密钥

使用LineConnection动画1D数据

如何才能知道Python中2列表中的巧合.顺序很重要,但当1个失败时,其余的不应该失败或是0巧合

在Python中对分层父/子列表进行排序

Pandas实际上如何对基于自定义的索引(integer和非integer)执行索引

如何比较numPy数组中的两个图像以获取它们不同的像素

numba jitClass,记录类型为字符串

将两只Pandas rame乘以指数

使可滚动框架在tkinter环境中看起来自然

PyQt5,如何使每个对象的 colored颜色 不同?'

使用密钥字典重新配置嵌套字典密钥名

在ubuntu上安装dlib时出错

如何在TensorFlow中分类多个类

python sklearn ValueError:使用序列设置数组元素

为什么在FastAPI中创建与数据库的连接时需要使用生成器?

使用字典或列表的值组合

如何在Python 3.9.6和MacOS Sonoma 14.3.1下安装Pyregion

为罕见情况下的回退None值键入

PYTHON中的selenium不会打开 chromium URL