【问题标题】:Reading files and writing to database in django在 django 中读取文件并写入数据库
【发布时间】:2010-07-20 20:10:45
【问题描述】:

我有一个 Django 应用程序,它打开一个文件,不断读取它,同时将数据写入 Postgres 数据库。我的问题是,每当我打开一个文件时,

file = open(filename, 'r')

我也无法在数据库中创建新事物,

Message.objects.create_message(sys, msg)

这应该创建一个包含两个字符串的数据库条目。但是,似乎什么都没有发生,并且我没有出现任何错误:(如果我决定关闭文件file.close(),在我写入数据库之前一切都很好。我的问题是我需要打开该文件来创建我的对象. 有人对此有解决方案吗?谢谢。

编辑

这是我的更多代码。基本上我在文件末尾有以下sn-p,然后在获取信息时写入数据库。

file.seek(0,2)         
while True:
  line = file.readline()
  if not line:
    time.sleep(1)
    continue
  Message.objects.create_message(sys, line)

编辑 2

终于让它工作了,但我不知道为什么。我很想知道为什么会这样:

str1ng = line[0:len(line)-1]
Message.objects.create_message(sys, str1ng)

该字符串与从 file.readline() 收集的字符串之间存在一些差异。 有什么想法吗?

【问题讨论】:

  • 您应该发布更多代码。从这些 sn-ps 无法判断发生了什么。
  • 这听起来像是通过文件本身进行消息传递的想法是什么让你在这里遇到麻烦。你能从以另一种方式写入文件的人那里获得 io 流吗?重新命名文件怎么样,使用该副本直到完成,然后清洗冲洗重复。?

标签: python database django file file-io


【解决方案1】:

试试这个:

file = open(filename, 'r')
fileContents = file.read()
file.close()

【讨论】:

  • 这行得通,但我需要保持文件打开,因为它在我阅读时被添加。
  • 我唯一能想到的就是每隔 x 秒做一次。
【解决方案2】:

你试过线缓存吗?像这样的东西可能会起作用(未经测试)。

import linecache

i = 0
go = True
file = ...
while (go == True):
   out = linecache.getline(file,i)
   ...process out...
   i = i+1
   if i % 100 == 0:
       # check for cache update every 100 lines
       linecache.checkcache(file)
   if ( some eof condition):
       go = False
linecache.clearcache()

【讨论】:

  • 尝试了这种方法,但不幸的是,同样的问题发生了。现在我很困惑。
  • 您的系统似乎一次只能有一个打开的文件句柄。你在用什么?
猜你喜欢
  • 1970-01-01
  • 2021-09-11
  • 1970-01-01
  • 1970-01-01
  • 2015-10-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
相关资源
最近更新 更多