Django适配器类型错误:“;分隔符;必须是1个字符的字符串
尝试将某些数据导入模型时出错。我得到的错误是TypeError:抱怨我使用的分隔符 下面是我的CSV导入模型,我使用的是文档中建议的默认分隔符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
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"))