亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

導入時,django-import-export csv 標頭之前的空行觸發異常

導入時,django-import-export csv 標頭之前的空行觸發異常

米琪卡哇伊 2023-10-31 15:01:22
從 csv 導入數據時,我意識到如果第一行不是標題,則會觸發此錯誤list indices must be integers or slices, not strfirst_name,last_name,email,password,roleNoak,Larrett,[email protected],8sh15apPjI,StudentDuffie,Milesap,[email protected],bKNIlIWVfNw,Student僅當第一行是標題時才有效first_name,last_name,email,password,roleNoak,Larrett,[email protected],8sh15apPjI,StudentDuffie,Milesap,[email protected],bKNIlIWVfNw,Student...我嘗試覆蓋before_import以刪除任何空白行def before_import(self, dataset, using_transactions, dry_run, **kwargs):    indexes = []    for i in range(0, len(dataset)):        row = ''.join(dataset[i])        if row.strip() == '':            indexes.append(i)    for index in sorted(indexes, reverse=True):        del dataset[index]              return dataset這適用于所有行,除了應始終包含標題的第一行,否則將引發錯誤。
查看完整描述

1 回答

?
達令說

TA貢獻1821條經驗 獲得超6個贊

經過幾個小時的調試,我找到了這個ImportMixin類,它位于import_export/admin.py


該類包含一個名為的方法import_action,如下所示


def import_action(self, request, *args, **kwargs):

    ...

    import_file = form.cleaned_data['import_file']

    ...

    data = tmp_storage.read(input_format.get_read_mode())

    ...

    dataset = input_format.create_dataset(data)

    ...

如您所見,該函數將上傳的文件讀取為字符串,然后將其傳遞給input_format.create_dataset(). 所以我所要做的就是添加一個刪除空白行的自定義函數


data = self.remove_blanks(data)

dataset = input_format.create_dataset(data)

import_export/admin.py/ImportMixin


def remove_blanks(self, data):

    return os.linesep.join([s for s in data.splitlines() if s.strip()])

這樣,任何 csv 文件都不會有任何空行,這將強制第一行成為標題,從而解決問題。我希望這對面臨同樣問題的人有用。


更新:還有一種簡單的方法可以通過覆蓋來執行相同的create_dataset操作import_export/formats/base_formats.py


import_export/formats/base_formats.py/TablibFormat


def create_dataset(self, in_stream, **kwargs):

    in_stream = os.linesep.join([s for s in in_stream.splitlines() if s.strip()])

    try:

        return tablib.import_set(in_stream, format=self.get_title())

    except:

        return tablib.import_set('', format=self.get_title())


查看完整回答
反對 回復 2023-10-31
  • 1 回答
  • 0 關注
  • 185 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號