我正在尝试以 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/