使用CSV Django模块以通用换行符模式打开文件
我正在尝试访问Django中的使用CSV Django模块以通用换行符模式打开文件,django,macos,csv,newline,python-2.x,Django,Macos,Csv,Newline,Python 2.x,我正在尝试访问Django中的model.filefield,以使用csv模块解析Python中的文件。它在Windows上工作,但在Mac上它给了我以下信息: Exception Type: Error Exception Value: new-line character seen in unquoted field - do you need to open the file in universal-newline mode? 代码如下: myfile = customerbulk.
model.filefield
,以使用csv
模块解析Python中的文件。它在Windows上工作,但在Mac上它给了我以下信息:
Exception Type: Error
Exception Value: new-line character seen in unquoted field - do you need to open the file in universal-newline mode?
代码如下:
myfile = customerbulk.objects.all()[0].fileup
mydata = csv.reader(myfile)
for email,mobile,name,civilid in mydata:
print email,mobile,name,civilid
我终于找到了解决办法:
mypath = customerbulk.objects.get(pk=1).fileup.path
o = open(mypath,'rU')
mydata = csv.reader(o)
这是什么
customerbulk.objects.all()[0].fileup
东西。它是模型上的文件名吗?fileup=models.FileField(verbose_name=“CsvFile”,upload_to='ExcelFiles'),如果我做一个像customerbulk.objects.get(pk=1)这样的小查询,那么使用rU
(它与open()函数相关,不是特定于csv的。):除了标准的fopen()值模式可能是“U”或“rU”。Python通常使用通用换行符支持构建;提供“U”将以文本文件的形式打开文件,但行可能会被以下任何一种方式终止:Unix行尾约定“\n”、Macintosh约定“\r”或Windows约定“\r\n”。
在Python>=3中,使用newline='
而不是mode='U'
。我相信您可以简化这一点。刚打开文件就开始寻找似乎很奇怪。以下内容帮助我克服了使用默认值将Excel电子表格导出为CSV时遇到的相同问题:data=CSV.reader(打开(文件名'rU'),quotechar=''”,delimiter=',')是的,打开后不需要查找文件的开头。>>o=open(mypath,'rU'))位,带“rU”标志是在我的例子中起作用的重要魔法。解释了rU
代表的含义:在具有通用换行符支持的Python中打开(),模式参数也可以是“U”,意思是“作为具有通用换行符解释的文本文件打开输入”。模式“rU”也是允许的,与“rb”对称“
@Xiao+1,用于链接到解释原理的原始PEP。在Python>=3中,使用newline
,默认值为newline=None
,类似于newline=”
,但它也将换行转换为\n
。我不确定其中哪一个等同于mode='U'