python - 如何通过 django 上传以通用换行模式打开 csv?

标签 python django csv django-forms

我正在尝试以 Django 形式上传一个 csv 文件:

class CSVUploadForm(forms.Form):
    csv_file = forms.FileField(label='Select a CSV file to import:',)

    def clean(self):
        file_csv = self.cleaned_data['csv_file']
        records = csv.reader(open('/mypath/'+file_csv.name, 'rU'), dialect=csv.excel_tab)

我需要以通用换行模式打开文件。我可以使用上面的“打开”方法来做到这一点,但这不适用于此表单,因为我正在处理的文件是 csv 的内存上传版本。

如何将通用换行模式标志 rU 传递给这样的东西:

records = csv.reader(file_csv, dialect=csv.excel_tab)

?

最佳答案

您可以按以下方式使用 str.splitlines()——它会在通用换行符处自动拆分:

def clean(self):
    file_csv = self.cleaned_data['csv_file']
    lines = file_csv.read().splitlines()
    records = csv.reader(lines, dialect=csv.excel_tab)

如果您担心创建 lines 变量的内存成本,您可以强制 Django 将文件保存到磁盘上的本地文件,更改 FILE_UPLOAD_MAX_MEMORY_SIZE 变量设置.py ( more on this variable here ):

# add to your settings.py
FILE_UPLOAD_MAX_MEMORY_SIZE = 0
FILE_UPLOAD_TEMP_DIR = '/tmp'

然后使用通用模式处理 tmp 文件夹中的文件:

def clean(self):
    file_csv = open(self.cleaned_data['csv_file'].temporary_file_path, 'rU')
    records = csv.reader(file_csv, dialect=csv.excel_tab)

关于python - 如何通过 django 上传以通用换行模式打开 csv?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20053902/

相关文章:

django - Bootstrap/Django 错误消息是否没有红色?

django - 如何查询重叠的日期范围?

python - Django 模板——嵌套包含在循环中

linux - 如何在 Linux 上使用不同的工作表创建 CSV 文件

python - 使用 python 将数据文件从源工作表转换为目标工作表格式。

python - 分层KFold输出处理

python - session 不可用,因为未设置 key 。将应用程序上的 secret_key 设置为唯一且 secret 的内容。 flask /英雄

python - 循环不适用于多处理和 sleep

ruby - 加快 csv 导入

python - 默认参数是否会覆盖 mypy 的类型提示?