Django适配器类型错误:“;分隔符;必须是1个字符的字符串

Django适配器类型错误:“;分隔符;必须是1个字符的字符串,django,python-2.7,csv-import,django-adaptors,Django,Python 2.7,Csv Import,Django Adaptors,尝试将某些数据导入模型时出错。我得到的错误是TypeError:抱怨我使用的分隔符 下面是我的CSV导入模型,我使用的是文档中建议的默认分隔符 class SkuCsvModel(CsvModel): sku_num = models.CharField() sku_category = models.ForeignKey(SkuCategory) short_desc = models.CharField() class Meta: delimiter = ";" dbMod

尝试将某些数据导入模型时出错。我得到的错误是TypeError:抱怨我使用的分隔符

下面是我的CSV导入模型,我使用的是文档中建议的默认分隔符

class SkuCsvModel(CsvModel):
sku_num = models.CharField()
sku_category = models.ForeignKey(SkuCategory)
short_desc = models.CharField()

class Meta:
    delimiter = ";"
    dbModel = Sku
我尝试使用的CSV文件如下:

 1365400;9;3/8 BALL VALVE
 1401901;9;BRASS ELBOW
 1406300;9;HOSE BARB, NPT
我在manage.py shell中测试的代码是:

>>> from core.models import SkuCsvModel
>>> my_csv_list = SkuCsvModel.import_data(data = open("labconco.csv"))
最后我得到的错误是:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "E:\bin\Python27\lib\site-packages\adaptor\model.py", line 197, in import_data
    return importer.import_data(data)
  File "E:\bin\Python27\lib\site-packages\adaptor\model.py", line 466, in import_data
    for line in csv.reader(data, delimiter=self.delimiter):
TypeError: "delimiter" must be an 1-character string
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“E:\bin\Python27\lib\site packages\adapter\model.py”,第197行,在import\u数据中
返回导入器。导入_数据(数据)
文件“E:\bin\Python27\lib\site packages\adapter\model.py”,第466行,在import\u数据中
对于csv.reader中的行(数据,分隔符=self.delimiter):
TypeError:“分隔符”必须是1个字符的字符串

所以我一直在摆弄django适配器工具,这个错误来自CsvImporter的import_data()方法,当我尝试将分隔符直接放入csv.reader(data,delimiter=';')时,它工作正常,我能够正确地看到文件。但无论我如何尝试输入这个import_data方法,都会发送一个“;”将生成一个错误。

请查看下面的代码段。如果我提供一个整数作为分隔符,它将失败,出现与示例中相同的异常。如果我给csv.reader提供一个分号作为分隔符,它就会工作。这基本上是在model.CsvImporter.import_data()中完成的,正如您已经发现的那样

>>> import csv
>>> import StringIO
>>> io = StringIO.StringIO('name;surname\nsascha;gottfried')
>>> for line in csv.reader(io, delimiter=10):
...     print line
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: "delimiter" must be an 1-character string
>>> for line in csv.reader(io, delimiter=';'):
...     print line
... 
['name', 'surname']
['sascha', 'gottfried']
但是省略定界符定义并在模型上调用“import\u from\u file”是非常好的。确保没有定义类分隔符。如果是这样,导入程序将运行CSV嗅探以从您传递的文件中检测分隔符。如果您提供您提到的文件,嗅探器将检测到“;”并设置self.delimiter

>>> from core.models import SkuCsvModel
>>> SkuCsvModel.has_class_delimiter()
>>> from core.models import SkuCsvModel
>>> SkuCsvModel.has_class_delimiter()
None
>>> my_csv_list = SkuCsvModel.import_from_file(file = open("labconco.csv"))

请看下面的代码片段。如果我提供一个整数作为分隔符,它将失败,出现与示例中相同的异常。如果我给csv.reader提供一个分号作为分隔符,它就会工作。这基本上是在model.CsvImporter.import_data()中完成的,正如您已经发现的那样

>>> import csv
>>> import StringIO
>>> io = StringIO.StringIO('name;surname\nsascha;gottfried')
>>> for line in csv.reader(io, delimiter=10):
...     print line
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: "delimiter" must be an 1-character string
>>> for line in csv.reader(io, delimiter=';'):
...     print line
... 
['name', 'surname']
['sascha', 'gottfried']
但是省略定界符定义并在模型上调用“import\u from\u file”是非常好的。确保没有定义类分隔符。如果是这样,导入程序将运行CSV嗅探以从您传递的文件中检测分隔符。如果您提供您提到的文件,嗅探器将检测到“;”并设置self.delimiter

>>> from core.models import SkuCsvModel
>>> SkuCsvModel.has_class_delimiter()
>>> from core.models import SkuCsvModel
>>> SkuCsvModel.has_class_delimiter()
None
>>> my_csv_list = SkuCsvModel.import_from_file(file = open("labconco.csv"))