Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用CSV Django模块以通用换行符模式打开文件_Django_Macos_Csv_Newline_Python 2.x - Fatal编程技术网

使用CSV 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.

我正在尝试访问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.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'