这是一个创建于 4173 天前的主题,其中的信息可能已经有所发展或是发生改变。
正在为公司内部写一个简单的web应用, 基本上就是查询应用,根据访问者输入的信息,返回数据库中相应的值,无写入操作,由于数据源就是从一张excel表格(大概有2000行、20列的数据)中得来的,我想图方便,不去将excel转换成譬如sqlite的数据库文件了,直接通过xlrd模块读取其中的数据,基本上我也将其写好了,如下。这个应用届时可能会有大概10个人以内同时查询操作,不知道这方案可行不?也还没有试过不知道多人同时访问会出现excel表被占用无法打开的类似问题吗?
import xlrd
fname = "spreadsheet.xlsx"
bk = xlrd.open_workbook(fname)
try:
sh = bk.sheet_by_name("sheet")
except:
print 'no sheet found'
nrows = sh.nrows
ncols = sh.ncols
#excel中的列名
name = 0
address = 1
phone = 2
age = 3
people = []
for i in xrange(2, nrows):
people.append(sh.cell_value(i, 0))
person = 'Tom'
if person in people:
print 'yes'
#查找到了该人返回其年龄列的值
print sh.cell_value((people.index(person)+2), age)
else:
print 'person not found'
6 条回复 • 1970-01-01 08:00:00 +08:00
|
|
1
shinwood 2013-02-02 14:10:43 +08:00
2000行问题不大,不过不用数据库还是效率极其低下。昨天刚把一个100万条记录的cvs 导入到MySQL 当中做分析。
|
|
|
2
bingo00 2013-02-02 14:15:07 +08:00 1
楼上正解,另外,也不会出现excel表被占用无法打开的类似问题,因为打开方式是异步的
|
|
|
3
jwu 2013-02-02 14:17:43 +08:00
@ shinwood @ bingo00 谢谢两位,只要不会出现被占用无法读取的问题就好,我写好具体看看效率到底有多差,譬如在查询页面输入回车后2秒内能够在跳转的页面中显示出结果就行 :D
|
|
|
4
meta 2013-02-03 11:59:18 +08:00
只读不可能出现锁竞争吧,如果你有事务要写回去,就得考虑同步的问题了。
|
|
|
5
tonylong 2013-02-03 12:06:42 +08:00
才这么点数据,还是只读,全部读取到内存,快到飞起。
|
|
|
6
sivacohan 2013-02-03 12:11:05 +08:00
如果是临时性的,用超不过一个月。你爱怎么做怎么做。 不过你得想好了,玩意boss觉得这个很有用,让你加点功能,以后维护excel,能让你哭死……
|