用Python编辑SQLite的时候,怎样在遍历数据的时候,对数据进行计数,并将计数个数更新在表中?
迷茫
迷茫 2017-04-18 09:06:22
[Python讨论组]

想用Python控制SQLite,遍历数据的时候,对相同的数据进行计数并放在SQL的表中。但是我用以下代码运行的时候,相同的数据并没有叠加计数,而是每个数据都在表里单独一行,计数列都是1。请指教

import sqlite3
import urllib.request


url='http://www.pythonlearn.com/code/mbox.txt'
data=urllib.request.urlopen(url).read().decode()

#print (type(data))

conn=sqlite3.connect('email.sqlite')
cur=conn.cursor()

cur.execute('''DROP TABLE COUNTS''')
cur.execute('''CREATE TABLE COUNTS (org TEXT, count INTEGER)''')
for line in data.split('\n'):
    #print (line)
    
    
    if  not line.startswith('From'):
        continue
    
    words=line.split()
    #print (words)
    email=words[1]
       # print (email)
    word=email.split('@')
    s=word[0]
    #print (s)
    cur.execute('SELECT count FROM COUNTS WHERE org = ?',(s,))
    try:
        count=cur.fetchone()[0]
        cur.execute('UPDATE count=count+1 WHERE org = ?',(s,))
    except:
        cur.execute('''INSERT INTO COUNTS (org,count) VALUES (?,1)''',(s,))
    conn.commit()
    
sqlstr='SELECT org,count FROM COUNTS ORDER BY count DESC LIMIT 10'
for row in cur.execute(sqlstr):
    print (str(row[0]),row[1])

cur.close()
迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

全部回复(1)
ringa_lee
# coding=utf-8

import requests
import collections

url = 'http://www.pythonlearn.com/code/mbox.txt'
data = requests.get(url).text

emails = [_.split()[1] for _ in data.split('\n') if _.startswith('From')]
print collections.Counter(emails).most_common(10)

#如果你只想取人名,这里再split一下
emails = [_.split()[1].split('@')[0] for _ in data.split('\n') if _.startswith('From')]
print collections.Counter(emails).most_common(10)
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号