python - 如何从 FileField 获取 (txt) 文件内容?

标签 python django file

我在使用 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/

相关文章:

python - 读取未知编码的文件

python - 为什么在使用浏览器或请求访问页面时来自 nomatim 的响应不同?

python - 在 Django 中设置拆卸登录注销的正确方法

php - 上传前是否可以显示 tmp 文件夹中的图像?

python - 能够使用值返回嵌套字典? Django

python - GIS/Gdal/OSGeos 在 Windows 上的 django 中导入错误

c++ - 在 Windows 中使用 UTF8 字符串打开文件名

python - 无法在 Web 浏览器中从 python 打开 html 文件 - 改为用记事本打开

python - 正则表达式消除 bibtex 文件中的字段

python - 在子图中裁剪 matplotlib 图片