- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个用户上传 CSV 文件的页面。这一点有效。
我可以读取 CSV 并将其转换为列表。我认为应该更快的东西需要相当多的时间(对于 17mb 的 CSV 文件,解析并将其转换为列表大约需要 7 秒)。
我现在想知道,执行此操作的最佳方法是什么?到目前为止,我的代码非常复杂(很久以前由一位计算机科学毕业生同事写的,现已离开),我想我想重写它,因为它太慢了。
我以前没有使用过 CSV。现在这就是我所拥有的:
import codecs
import csv
import sys
def read_csv_file(self, file_path):
is_file = False
while not is_file:
if os.path.exists(file_path):
is_file = True
result_data = []
csv.field_size_limit(sys.maxsize)
csv_reader = csv.reader(codecs.open(file_path, 'rU', 'utf-8'), delimiter=',')
for row in csv_reader:
result_data.append(row)
return result_data
将 CSV 转换为列表(然后我可以压缩?)是最好的方法吗?
最终,目标是创建数据库对象(也许是在循环中?),这就像循环遍历每个列表,使用索引创建对象,将这些对象附加到对象列表,然后执行批量创建:
object_instance_list.append(My_Object.objects.get_or_create(property=csv_property[some_index], etc etc)[0])
My_Object.bulk_create(object_instance_list)
这样会有效率吗?
我应该使用听写吗?
是否有一个内置方法可以支持 Python 的 CSV 或已经实现的一些 Django 功能?
基本上,由于我没有那样的经验,而且这是我第一次使用 CSV,所以我希望从一开始就做好它。
我将不胜感激在这方面的任何帮助,这样我就可以学习处理这个问题的正确方法。谢谢!
最佳答案
所以,这还没有经过测试,但从概念上讲你应该能够理解这个想法。诀窍是利用 **kwargs
。
import csv
def read_csv():
"""Read the csv into dictionaries, transform the keys necessary
and return a list of cleaned-up dictionaries.
"""
with open('data.csv', newline='') as csvfile:
reader = csv.DictReader(csvfile)
return [map_rows_to_fields(row) for row in reader]
def map_rows_to_fields(row):
"""Here for each dictionary you want to transform the dictionary
in order to map the keys of the dict to match the names of the
fields on the model you want to create so we can pass it in as
`**kwargs`. This would be an opportunity to use a nice dictionary
comprehension.
"""
csv_fields_to_model_fields = {
'csv_field_1': 'model_field_1',
'csv_field_2': 'model_field_2',
'csv_field_n': 'model_field_n',
}
return {
csv_fields_to_model_fields[key]: value
for key, value in row.items()
}
def instantiate_models():
"""Finally, we have our data from the csv in dictionaries
that map values to expected fields on our model constructor,
then we can just instantiate each of those models from the
dictionary data using a list comprehension, the result of which
we pass as the argument to `bulk_create` saving the rows to
the database.
"""
model_data = read_csv()
MyModel.objects.bulk_create([
MyModel(**data) for data in model_data
])
方法 bulk_create
确实有一些注意事项,因此请确保在您的情况下可以使用它。
https://docs.djangoproject.com/en/2.0/ref/models/querysets/#bulk-create
如果您无法使用bulk_create
,那么只需将模型置于循环中即可。
for data in model_data:
MyModel.objects.create(**data)
关于python - Django 、Python : Best way to parse a CSV and convert to Django model instances,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50854622/
我发现在使用parse-node包时,不能再使用Parse.Cloud.httpRequest了。我也知道 Parse 的 Image 对象将不可用。 到目前为止,我已经能够用原生的替换一些 Pars
关闭。这个问题是opinion-based 。目前不接受答案。 已关闭 9 年前。 已锁定。这个问题及其答案是locked因为这个问题是题外话,但却具有历史意义。目前不接受新的答案或互动。 我有一个函
开源 Parse Server 是否包含用于配置新 Parse 实例的 Schema API?我试图消除手动创建应用程序的需要。 这是通过 Parse.com 提供的架构 API http://blo
我想从我的云代码发出一个 http 请求,该请求在我的客户端被调用。 最佳答案 一开始我发现这有点令人困惑,所以希望这会有所帮助。 在您的云代码中main.js Parse.Cloud.define(
这部分代码应该读入两个或更多数字(省略主 io 函数),然后是一个“+”来给出总和。使用有理数是因为稍后我将进行乘法和其他此类操作。 data Expression = Number Rationa
我似乎找不到任何关于此的官方信息:Does Parse.Config work on Parse Server?它曾经在 Parse.com 上工作,但是当我尝试迁移到 Parse.Server 时,
我正在尝试找到使用 Parse.com 添加密码要求的最佳程序。似乎最简单的方法是在保存用户数据之前使用云功能执行。我唯一的警告是,只有当密码与数据库中存储的密码不同或者用户不存在于数据库中时,我才想
我是 android 开发、应用程序开发和一般开发的初学者,我正在尝试为我的 android 应用程序设置后端数据库。我决定使用一个名为 back4app 的服务,以便获得更加用户友好的数据库体验,因
我目前正在尝试将 Facebook 登录功能添加到我的应用程序。 根据Android文档,当我添加 compile 'com.parse:parsefacebookutils-v4-android:1
我正在尝试使用 Rebol 2/3 从字符串中解析货币值,货币值的格式为: 10,50 欧元或 10,50 欧元 我在浏览了所有 PARSE 文档后想出了这段代码,我可以在 Red 中找到它,但在 R
代码: DateTimeFormat dateFormat = DateTimeFormat .getFormat("EEE MMM dd HH:mm:ss zzz y
我不再在 Parse 上看到用于导入 JSON 或 CSV 文件的导入按钮。他们是否将其移动到某个地方,或者不再可能导入这些文件类型? 最佳答案 官方原因是这样的: “[导入类按钮] 几天前被删除,因
我正在使用 PHP 从我的服务器检索一些数据。我想在 javascript 应用程序中使用这些数据,所以我正在做这样的事情: var polylines = ; $polylines 只是一个 PHP
我已经开始使用 .NET 4 System.Numerics.BigInteger Structure我遇到了一个问题。 我正在尝试解析一个包含无符号(正数)的十六进制数字的字符串。我得到一个负数。
我正在使用 PHP 从我的服务器检索一些数据。我想在 javascript 应用程序中使用这些数据,所以我正在做这样的事情: var polylines = ; $polylines 只是一个 PHP
在 Go 中,尝试将字符串转换为 time.Time 时,使用时间包的 Parse 方法不会返回预期结果。似乎问题出在时区。我想更改为 ISO 8601 结合 UTC 日期和时间。 package m
我正在尝试将此字符串模式 "4-JAN-12 9:30:14" 解析为 time.Time。 尝试了 time.Parse("2-JAN-06 15:04:05", inputString) 和许多其
从云代码和解析开始。使用this . 如何删除所有 Parse 项目以便开始创建新项目?我收到以下错误: “您想要创建一个新应用程序,还是将 Cloud Code 添加到现有应用程序中?输入“(n)e
我在解析云代码时有这个功能: Parse.Cloud.define("testfunction", function(request, response) { var username = r
最近,我在 parse.com 上做了一些测试。我现在面临在后台作业中使用 Parse.Object.saveAll 的问题。 从 parse.com 的文档来看,后台作业可以运行 15 分钟。我现在
我是一名优秀的程序员,十分优秀!