A. 如何通过python快速输出数据库数据到excel
下载扩展库 xlrd 读excle xlwt 写excle 直接在网络上搜就能下载 下载后使用 import xlrd 就可以读excle文件了 打开文件: xls = xlrd.open_workbook(fileName)!
B. 求助用python从数据库取数据动态生成表格的方法
一、可使用的第三方库
python中处理excel表格,常用的库有xlrd(读excel)表、xlwt(写excel)表、openpyxl(可读写excel表)等。xlrd读数据较大的excel表时效率高于openpyxl,所以我在写脚本时就采用了xlrd和xlwt这两个库。介绍及下载地址为:http://www.python-excel.org/ 这些库文件都没有提供修改现有excel表格内容的功能。一般只能将原excel中的内容读出、做完处理后,再写入一个新的excel文件。
二、常见问题
使用python处理excel表格时,发现两个个比较难缠的问题:unicode编码和excel中记录的时间。
因为python的默认字符编码都为unicode,所以打印从excel中读出的中文或读取中文名的excel表或sheet时,程序提示错误UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)。这是由于在windows中,中文使用了gb2312编码方式,python将其当作unicode和ascii来解码都不正确才报出的错误。使用VAR.encode('gb2312')即可解决打印中文的问题。(很奇怪,有的时候虽然能打印出结果,但显示的不是中文,而是一堆编码。)若要从中文文件名的excel表中读取数据,可在文件名前加‘u’表示将该中文文件名采用unicode编码。
有excel中,时间和日期都使用浮点数表示。可看到,当‘2013年3月20日’所在单元格使用‘常规’格式表示后,内容变为‘41353’;当其单元格格式改变为日期后,内容又变为了‘2013年3月20日’。而使用xlrd读出excel中的日期和时间后,得到是的一个浮点数。所以当向excel中写入的日期和时间为一个浮点数也不要紧,只需将表格的表示方式改为日期和时间,即可得到正常的表示方式。excel中,用浮点数1表示1899年12月31日。
三、常用函数
以下主要介绍xlrd、xlwt、datetime中与日期相关的函数。
import xlrd
import xlwt
from datetime
def testXlrd(filename):
book=xlrd.open_workbook(filename)
sh=book.sheet_by_index(0)
print "Worksheet name(s): ",book.sheet_names()[0]
print 'book.nsheets',book.nsheets
print 'sh.name:',sh.name,'sh.nrows:',sh.nrows,'sh.ncols:',sh.ncols
print 'A1:',sh.cell_value(rowx=0,colx=1)
#如果A3的内容为中文
print 'A2:',sh.cell_value(0,2).encode('gb2312')
def testXlwt(filename):
book=xlwt.Workbook()
sheet1=book.add_sheet('hello')
book.add_sheet('word')
sheet1.write(0,0,'hello')
sheet1.write(0,1,'world')
row1 = sheet1.row(1)
row1.write(0,'A2')
row1.write(1,'B2')
sheet1.col(0).width = 10000
sheet2 = book.get_sheet(1)
sheet2.row(0).write(0,'Sheet 2 A1')
sheet2.row(0).write(1,'Sheet 2 B1')
sheet2.flush_row_data()
sheet2.write(1,0,'Sheet 2 A3')
sheet2.col(0).width = 5000
sheet2.col(0).hidden = True
book.save(filename)
if __name__=='__main__':
testXlrd(u'你好。xls')
testXlwt('helloWord.xls')
base=datetime.date(1899,12,31).toordinal()
tmp=datetime.date(2013,07,16).toordinal()
print datetime.date.fromordinal(tmp+base-1).weekday()
C. python读取excel值数据库更改
xlwt:写入excel表格 ,用这个之前需要先导入模块 xlwt: import xlwt
xlrd:读取excel,用这个之前需要先导入模块 xlwt:import xlrd
注意:excel表中取值也是用索引,也是从0开
比如:(行的索引,列的索引)
(0,0)表示第一行,第一个空格
(0,3)表示第一行的第4个空格里面的值
(3,0)表示第4列,第一个空格里面的值
excel写数据'''
execel=xlwt.Workbook() #新建一个excle表格
sheet=execel.add_sheet('sheet1') #创建一个sheet
#在sheet中写入数据,0,0,表示excel表格中的第一行,第一列
sheet.write(0,0,'username')
execel.save('0519.xls') #保存这个excel文件,名称叫0529.xls,此时打开文件第一行第一列写入了数据'username'
D. odoo8.0 XP可以装吗
1. 更新系统组件
sudo apt-get update
sudo apt-get dist-upgrade
2.增加OpenERP用户
(如果之前用apt-get 或者deb方式安装过,先删除这个用户重新再创建下 sudo userdel openerp)
(一样的,如果有 /opt/openerp 这个目录 也先删除掉sudo rm -r /opt/openerp)
sudo adser --system --home=/opt/openerp --group openerp
openerp用户被加入system组,该用户不能够从终端登录。
需要openerp用户操作时,可以用下面的命令切换 sudo su - openerp -s /bin/bash
完成相关操作后可以用exit退出openerp用户shell
3.安装并配置数据库
进入postgres用户shell(postgres是数据库默认的管理员,由安装程序创建)
sudo su - postgres
为OE创建数据库用户,按照提示输入用户密码。
createuser --createdb --username postgres --no-createrole --no-superuser --pwprompt openerp
(要删除以前自动安装残留的postgresql 里面的 openerp用户 用dropuser openerp)
退出postgres用户shell
exit
4.安装OE的Python依赖包
sudo apt-get install python-dateutil python-docutils python-feedparser python-gdata \
python-jinja2 python-ldap python-libxslt1 python-lxml python-mako python-mock python-openid \
python-psycopg2 python-psutil python-pybabel python-pychart python-pydot python-pyparsing \
python-reportlab python-simplejson python-tz python-unittest2 python-vatnumber python-vobject \
python-webdav python-werkzeug python-xlwt python-yaml python-zsi python-pyPdf
6月6日起 需要 sudo apt-get install python-requests
以及:sudo apt-get install python-passlib
7月9日起
apt-get install python-decorator
3月20日的版本好像报价单也不能打,
需要装 wkhtmltopdf 0.12.0 , gist.github.com/slickplaid/5557321
不过这方法安装好像很费时,等新版本出来再看看,反正正式要用也等正式版吧,或者用2月26日那个版本。
deb安装就搞定,2月26日之后的版本,好像报表这块改动比较多。
源码安装的,也可以下载了2月26日的版本 停掉服务 替换 openerp 目录。
5.安装OE服务器
首先下载OE源码包,这里下载OpenERP8.0最新开发版本
放开目录权限:
sudo chmod -R 777 /opt/openerp
进入目录:
cd /opt/openerp
下载最新的源码包:
wget ightly.openerp.com/trunk/nightly/src/openerp-8.0dev-latest.tar.gz
最新的 odoo源码 应该在 codeload.github.com/odoo/odoo/zip/master
把源文件解压到openerp用户家目录下:
sudo tar xvf openerp-8.0dev-latest.tar.gz
odoo 注意文件名变化 用: unzip master 就好了
把文件的所有者改为openerp用户:
sudo chown -R openerp: *
这里建议把服务器组件的安装目录修改为server,以便于后续修改时不必修改配置文件。
在当前目录创建目录,给目录最大权限,移动刚才解压的目录到server 目录:
sudo mkdir server
sudo chmod -R 777 server
sudo mv -T openerp-8.0dev-20140318-000101 server
(注意这里,目录名"openerp-8.0dev-20140318-000101"会因为你下载的时间不同而有所不同。
也注意odoo 的目录)
注意,比较推荐用git方式下载,
先apt-get install git
然后
git clone github.com/odoo/odoo.git
git pull 进行差异更新
git checkout 8.0(切换到8.0版本)
git checkout 7.0(切换到7.0版本)
6.配置OpenERP服务
复制OE的默认配置文件到/etc/并修改所有者及权限:
sudo cp /opt/openerp/server/install/openerp-server.conf /etc/
sudo chown openerp: /etc/openerp-server.conf
sudo chmod 640 /etc/openerp-server.conf
修改配置文件:
sudo vi /etc/openerp-server.conf
这里需要修改数据库用户的密码,为第四步时设定的密码(这里用password做参考值),并增加日志文件的路径:
[options]
; This is the password that allows database operations:
; admin_passwd = admin
db_host = 127.0.0.1
db_port = 5432
db_user = openerp
db_password = password
logfile = /var/log/openerp/openerp-server.log
addons_path = /opt/openerp/server/addons
说明:Odoo8 的 addons 目录变位置了,加一句
使用openerp用户shell登录,验证openerp是否已正确安装:
sudo su - openerp -s /bin/bash
/opt/openerp/server/openerp-server
最后一行显示 openerp.service.server: HTTP service (werkzeug) running on 0.0.0.0:8069表明openerp服务器组件已经安装正确,
你可以用从浏览器输入IP:8069来连接oe(其中IP是OE服务器的IP,本机可以用localhost:8069,或者127.0.0.1:8069连接。
此时你可以按Ctr+C停止OE服务。
如果发现错误提示,通常是依赖包没有正确安装。按照第五步的方法安装缺少的依赖包。
7.增加启动脚本
增加启动脚本/etc/init.d/openerp :
sudo vi /etc/init.d/openerp
输入如下内容(可以粘贴复制的),:w 保存:q退出
#!/bin/sh
### BEGIN INIT INFO
# Provides: openerp-server
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Should-Start: $network
# Should-Stop: $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Enterprise Resource Management software
# Description: Open ERP is a complete ERP and CRM software.
### END INIT INFO
PATH=/bin:/sbin:/usr/bin
DAEMON=/opt/openerp/server/openerp-server
NAME=openerp-server DESC=openerp-server
# Specify the user name (Default: openerp).
USER=openerp
# Specify an alternate config file (Default: /etc/openerp-server.conf).
CONFIGFILE="/etc/openerp-server.conf"
# pidfile
PIDFILE=/var/run/$NAME.pid
# Additional options that are passed to the Daemon.
DAEMON_OPTS="-c $CONFIGFILE"
[ -x $DAEMON ] || exit 0
[ -f $CONFIGFILE ] || exit 0
checkpid() {
[ -f $PIDFILE ] || return 1
pid=`cat $PIDFILE` [ -d /proc/$pid ] && return 0 return 1
}
case "${1}" in
start)
echo -n "Starting ${DESC}: "
start-stop-daemon --start --quiet --pidfile ${PIDFILE} \
--chuid ${USER} --background --make-pidfile \
--exec ${DAEMON} -- ${DAEMON_OPTS}
echo "${NAME}."
;;
stop)
echo -n "Stopping ${DESC}: "
start-stop-daemon --stop --quiet --pidfile ${PIDFILE} \
--oknodo echo "${NAME}."
;;
restart|force-reload)
echo -n "Restarting ${DESC}: "
start-stop-daemon --stop --quiet --pidfile ${PIDFILE} \
--oknodo
sleep 1
start-stop-daemon --start --quiet --pidfile ${PIDFILE} \
--chuid ${USER} --background --make-pidfile \
--exec ${DAEMON} -- ${DAEMON_OPTS}
echo "${NAME}."
;;
*)
N=/etc/init.d/${NAME}
echo "Usage: ${NAME} {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
建立日志文件的目录,并修改权限:
sudo mkdir /var/log/openerp
sudo chown openerp:root /var/log/openerp
sudo chmod +x /etc/init.d/openerp
启动服务并测试脚本是否可以正常工作:
sudo /etc/init.d/openerp start
netstat -at
两个命令之间间隔一段时期,让OE服务器启动,结果中表明有一行
tcp 0 0 *:8069 *:* LISTEN
表明脚本启动OE成功。
使用浏览器web客户端打开,可以进入数据库管理页面。建议在此修改数据库管理员用户密码。
默认的用户名和密码问admin、admin。然后停止openerp:
sudo /etc/init.d/openerp stop
访问日志文件及网络监听,确认服务已经停止:
netstat -at
8.设置开机自动启动:
sudo update-rc.d openerp defaults
查看日志:
less /var/log/openerp/openerp-server.log
创建数据库,开始openerp之旅吧!
注意这个案例源码运行的 openerp 目录在 /opt/openerp/server/openerp ,
所以要添加 扩展 添加 到 /opt/openerp/server/openerp/addons 目录
需要使用 winscp 和自动备份 模块的的,记得放开 权限 sudo chmod -R 777 /opt/openerp/server/openerp/addons
和自动备份模块的相应权限。
更新:下载最新的源码包,停掉服务sudo /etc/init.d/openerp stop
直接用最新的openerp目录覆盖对应目录就好了,
然后再启动服务sudo /etc/init.d/openerp start
E. 爬虫数据用什么数据库储存最合适
txt文件
MySQL数据库:
xlwt表
MongoDB数据库
这几种都可以用来存储爬虫数据
F. Python怎样实现数据筛选之后不存成excel
1 读取Excel使用xlrd
#1、导入扩展包
importxlrd
#2、打开Excel文件读取数据
data=xlrd.open_workbook('excelFile.xls')
2 操作mysql使用MySQLdb
importMySQLdb
#打开数据库连接
db=MySQLdb.connect("localhost","testuser","test123","TESTDB",charset='utf8')
#使用cursor()方法获取操作游标
cursor=db.cursor()
#使用execute方法执行SQL语句
cursor.execute("SELECTVERSION()")
#使用fetchone()方法获取一条数据
data=cursor.fetchone()
print"Databaseversion:%s"%data
#关闭数据库连接d
b.close()
3 写入Excel使用xlwt
importxlwt
#创建一个workbook设置编码
workbook=xlwt.Workbook(encoding='utf-8')
#创建一个worksheet
worksheet=workbook.add_sheet('MyWorksheet')
#写入excel
#参数对应行,列,值
worksheet.write(1,0,label='thisistest')
#保存
workbook.save('Excel_test.xls')
G. 如何使用python 统计网站访问量并生成报表
统计网站访问量
统计出每个IP的访问量有多少?(从日志文件中查找)
#!/usr/bin/env python
#!coding=utf-8
list = []
f = file('/tmp/1.log')
str1 = f.readlines()
f.close()
for i in str1:
ip = i.split()[0] //split()通过指定分隔符对字符串进行切片,默认为所有的空字符;split分隔后是一个列表,[0]表示取其第一个元素;
list.append(ip)//追加
list_num = set(list)
for j in list_num:
num = list.count(j)
print '%s : %s' %(j,num)
生成报表
#_*_coding:utf-8_*_
import MySQLdb
import xlwt
from datetime import datetime
def get_data(sql):
# 创建数据库连接.
conn = MySQLdb.connect(host='127.0.0.1',user='root'\
,passwd='123456',db='test',port=3306,charset='utf8')
# 创建游标
cur = conn.cursor()
# 执行查询,
cur.execute(sql)
# 由于查询语句仅会返回受影响的记录条数并不会返回数据库中实际的值,所以此处需要fetchall()来获取所有内容。
result = cur.fetchall()
#关闭游标
cur.close()
#关闭数据库连接
conn.close
# 返给结果给函数调用者。
return result
def write_data_to_excel(name,sql):
# 将sql作为参数传递调用get_data并将结果赋值给result,(result为一个嵌套元组)
result = get_data(sql)
# 实例化一个Workbook()对象(即excel文件)
wbk = xlwt.Workbook()
# 新建一个名为Sheet1的excel sheet。此处的cell_overwrite_ok =True是为了能对同一个单元格重复操作。
sheet = wbk.add_sheet('Sheet1',cell_overwrite_ok=True)
# 获取当前日期,得到一个datetime对象如:(2016, 8, 9, 23, 12, 23, 424000)
today = datetime.today()
# 将获取到的datetime对象仅取日期如:2016-8-9
today_date = datetime.date(today)
# 遍历result中的没个元素。
for i in xrange(len(result)):
#对result的每个子元素作遍历,
for j in xrange(len(result[i])):
#将每一行的每个元素按行号i,列号j,写入到excel中。
sheet.write(i,j,result[i][j])
# 以传递的name+当前日期作为excel名称保存。
wbk.save(name+str(today_date)+'.xls')
# 如果该文件不是被import,则执行下面代码。
if __name__ == '__main__':
#定义一个字典,key为对应的数据类型也用作excel命名,value为查询语句
db_dict = {'test':'select * from student'}
# 遍历字典每个元素的key和value。
for k,v in db_dict.items():
# 用字典的每个key和value调用write_data_to_excel函数。
write_data_to_excel(k,v)
H. 如何通过python快速输出数据库数据到excel
pip install xlwings
安装这个包,然后网上找使用说明。该包在PYTHON中简直可当成EXCEL的外挂了,可实时从EXCEL中读取单元格中的数据,也可实时将数据传递到EXCEL中显示。
I. 有哪些值得推荐的 Python 开发工具
前提:用来做数据处理和相关的系统开发
刚学python时,面对简陋的官方版idle和一大堆开发平台和发行版,不知道究竟如何下手。在进行多方尝试后,我最后的选择是Anaconda + Pycharm,用anaconda集成的ipython做工作台,做一些分析和小段程序调试的工作,用Pycharm写相应脚本和程序包的开发。这两个工具都是跨平台的,也都有免费版本。
具体来说Anaconda集成了几乎所有我需要的包库,包含了我整个工作流程,做数据分析的pandas\scipy\numpy、绘图的matplotlib、读写Excel文档的xlrd/xlwt,链接SQL数据库的SQLalchemy、机器学习框架sklearn等。对于Anaconda集成的两个工作平台,Spyder——一个类似于Matlab和Rstudio的IDE,是专注于面向数据的分析的,因为其特点也主要是数据区的存在,可以即时知道变量值的变化;Ipython——一个基于cell的shell界面,可以理解为python自带shell的增强版,它将程序分成一块一块的cell,每个cell可以包含多条语句,可以单独调试运行,并将结果保存在内存中,cell之间可以相互调用,并保持一定的相互独立。
可以说有了anaconda自带的这两个工具,足够做数据处理相关的工作了(本身anaconda就是一个为了数据科学而诞生的发行版),但如果涉及到脚本程序和包的开发,感觉spyder还是有点弱,在试过IDE,代码编辑器(比如visual code、sublime等)+插件,这两种方案后,我最后选择了集成度更高的成熟IDE——Pycharm替换spyder作为主要的开发平台,看我头像也可以知道我是一个喷气大脑的死忠,他们家的IDE真的很好用~理由如下:
1、首先作为学生,可以通过e邮箱申请到Jetbrains全家桶,即便无法获取授权,pycharm的community版本免费并且功能足够
2、对于pycharm,可以方便快捷地切换python不同版本的解释器,甚至可以安装相同版本的python解释器配置不同的开发环境,这可以解决有些包之间冲突的情况,也可以针对有些框架按需装包;并且pycharm内置包管理,可以免去pip或者conda方式管理包。
3、pycharm这个IDE的颜色方案、拼写补全、函数联想、函数跳转源代码、断点调试及debug等功能都让我用的十分顺手。
总之我现在的工作流程就是,先用对我需要的功能进行设计,而后在ipython界面下设计调试每个功能模块,调试成功后放到pycharm中组合起来,写成脚本文件,最后用pycharm做调试形成成品。
2017、10、25 补充:
Pycharm作为IDE还有两个功能值得使用,一个是可以结合unitest包做我们开发模块的单元测试,另一个就是与svn、git等版本工具合作进行我们程序的版本控制,此外,在最新版的pycahrm当中,除了左侧折叠显示程序层次,下方也有我们当前光标所在位置对应的层次,并可以方便进行跳转。
总之,用pycharm写python真是越用越顺手~
J. python的库,xlwt或者xlrd可以另存为html类型么
页面上一般是没有办法直接显示excel的,你可以遍历这个数据,生成html显示在页面上