我在使用 Django 打开存储在我的数据库中的文本文件时遇到问题。我想通过我模型的 FileField 访问它...模型看起来像这样
class MyModel(models.Model):
saved_file = FileField()
我通过管理界面上传了一个测试文件,它工作正常。在我看来,我想访问这个文件。如果我用标准的 python open() 打开它,它工作正常......
f = open(path, 'r')
a = f.readlines()
return render_to_response('base.html', {'content': a}, context_instance=RequestContext(request))
这会显示文件的行... 根据 https://docs.djangoproject.com/en/dev/ref/models/fields/#filefield当调用模型中的 FileField 时,会得到一个 FieldFile 代理,所以
f = MyModel.objects.all().get(id=0).saved_file
应将 FieldFile 存储在 f 中,此外文档指出通过在 FieldFile 上强制转换 .open(mode='rb') 从模型打开文件,因此
file = f.open(mode='rb')
应该像文档中所述的 python .open() 一样工作。所以为了得到我做的台词
file.readlines()
应该返回我的行列表。发生的事情是我收到一条错误消息,指出 .readlines() 属性不存在。我不需要文件来显示它,这只是一种测试打开文件是否有效的方法,但我需要 View 中变量中的文件内容,以便在我的业务逻辑中进一步使用它。 谁能建议一种从模型中从 FileField 中获取文件内容的方法?
最佳答案
文档指出文件默认以“rb”模式打开,但您可能希望以“r”模式打开以将文件视为文本文件:
my_object = MyModel.objects.get(pk=1)
try:
my_object.saved_file.open('r')
lines = my_object.saved_file.readlines()
finally:
my_object.saved_file.close()
更好的是,您可以在 Django v2.0+ 中使用上下文管理器
my_object = MyModel.objects.get(pk=1)
with my_object.saved_file.open('r') as f:
lines = f.readlines()
关于python - 如何从 FileField 获取 (txt) 文件内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13412924/