2017-09-09 14 views
0

私は、&の辞書を作成して、user_idと同じ辞書を入れてみたいと思います。今私はエラー、ValueError: invalid literal for int() with base 10: '013000ab7C8'を持っています。 もちろん、 '013000ab7C8'はintではありませんが、なぜこのエラーが発生するのか理解できません。 私はviews.pyValueError:基数10のint()のリテラルが無効です: '013000ab7C8'

#coding:utf-8 
from django.shortcuts import render 
import xlrd 
from .models import User 

book = xlrd.open_workbook('../data/excel1.xlsx') 
sheet = book.sheet_by_index(1) 

def build_employee(employee): 
    if employee == 'leader': 
    return 'l' 
    if employee == 'manager': 
    return 'm' 
    if employee == 'others': 
    return 'o' 

for row_index in range(sheet.nrows): 
    rows = sheet.row_values(row_index) 
    is_man = rows[4] != "" 
    emp = build_employee(rows[5]) 
    user = User(user_id=rows[1], name_id=rows[2], name=rows[3], 
       age=rows[4],man=is_man,employee=emp) 
    user.save() 


files = glob.glob('./user/*.xlsx') 

data_dict_key ={} 
for x in files: 
    if "$" not in x: 
     book3 = xlrd.open_workbook(x) 
     sheet3 = book3.sheet_by_index(0) 
     cells = [ 
      ] 
     data_dict = OrderedDict() 
     for key, rowy, colx in cells: 
      try: 
       data_dict[key] = sheet3.cell_value(rowy, colx) 
      except IndexError: 
       data_dict[key] = None 

     if data_dict['user_id'] in data_dict_key: 

      data_dict_key[data_dict['user_id']].update(data_dict) 
         continue 
     data_dict[data_dict_key['user_id']] = data_dict 
     for row_number, row_data in data_dict_key.items(): 
      user1 = User.filter(user_id=row_data['user_id']).exists() 
      if user1: 
       user1.__dict__.update(**data_dict_key) 
       user1.save() 

に書いた私は のuser_idでユーザーのフォルダ& excel1.xlsx下のExcelファイルを接続したい、それはそれぞれのデータが同じのuser_idを持っている場合、それが接続されることを意味します。 data_dict_keyは、私はこの問題を解決する必要がありますどのように?

dicts = { 
    '013000ab7C8: OrderedDict([ 
     ('user_id', '013000ab7C8'), 
     ('name_id', 'Blear'), 
     ('nationality', 'America'), 
     ('domitory', 'A'), 
     ('group', 1), 
    ]), 
    '088009cd1W9': OrderedDict([ 
     ('user_id', '088009cd1W9'), 
     ('name_id', 'Tom'), 
     ('nationality': 'UK'), 
     ('domitory': 'B'), 
     ('group': 18), 
    ]) 
} 

は私のコード何が間違っているのですか?

+1

エラーのスタックトレースを提供してコードに接続できますか? –

答えて

1

あなたUserモデルのuser_idフィールドは、明らかに行うことはできませんIntegerFieldとして指定された場合:

user = User(user_id=rows[1], name_id=rows[2], name=rows[3], ...) 
#     ^^^^^^^ Needs integer value 

とも:別の方法として

user1 = User.filter(user_id=row_data['user_id']).exists() 
#       ^^^^^^^^ Needs integer value 

を、値が進値であれば、 a-f以外に他のアルファ文字が含まれていない場合は、値がベース16にあると仮定し、代わりにその値を利用することができます。

>>> int('013000ab7C8', 16) 
81605081032 

しかし、これは安定した解決策ではありません。 これらのフィールドを直接整数値として再指定したいと思うかもしれません。

+1

他のエントリには 'user_id:088009cd1W9'があるので、文字は16進値ではないようです。 –

1

あなたがmodels.pyを表示した方が良いでしょう。あなたは、models.pyのUserクラスの下で整数フィールドとしてuser_idを宣言しているかもしれません。したがって、このエラーが発生しています。

関連する問題