此应用程序将读取邮箱数据(mbox.txt),使用具有以下架构的数据库计算每个组织的电子邮件数量(即电子邮件地址的域名),以维持计数。
CREATE TABLE Counts (org TEXT, count INTEGER)
在mbox.txt上运行程序后,将上面生成的数据库文件上传以进行评分。 如果您在测试中多次运行程序或使用不同的文件,请确保在每次运行之前清空数据。
您可以将此代码用作应用程序的起点:http://www.pythonlearn.com/code/emaildb.py。此应用程序的数据文件与先前的分配相同:http://www.pythonlearn.com/code/mbox.txt。
第一次学习Sqlite。我对这项任务感到非常困惑,尽管看起来很容易。我不知道如何将Python代码连接到Sqlite。他们似乎不需要将代码作为任务。所有需要都是数据库文件。我该如何解决这个问题。不知道如何启动它。非常感谢!
答案 0 :(得分:2)
您已经获得的起始代码是您想要做的非常好的模板。不同之处在于 - 在该示例中 - 您正在计算电子邮件地址的出现次数,并且在此问题中您将计算域名。
首先要考虑如何从电子邮件地址获取域名。根据给定的代码构建(设置email = pieces [1]):
domain = email.split('@')[1]
这将打破@字符上的电子邮件,并返回第二个项目(' @'之后的部分),即域名 - 您想要计算的内容。
在此之后,浏览代码中的SQL语句并替换“电子邮件”#39;使用'域名',以便您计算正确的事情。
最后一件事 - 模板代码检查' mbox-short.txt' - 您还需要编辑所需的文件。
答案 1 :(得分:1)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void)
{
char *s = "foo bar";
char *a = malloc(sizeof *a * (strlen(s) + 1));
strcpy(a, s);
puts(a);
size_t rest = strlen(a);
/* Don't do anything if a is an empty string */
if (rest) {
memmove(a, a+1, rest);
/* If you must reallocate */
char *temp = realloc(a, rest);
if (temp) {
a = temp;
}
}
puts(a);
free(a);
return 0;
}
答案 2 :(得分:0)
我还是新来的,但我要感谢Stidgeon指出我正确的方向。我怀疑其他使用Python数据库的学生也会在这里结束。
您需要对源代码执行两项操作。
这应该可以帮助你。
答案 3 :(得分:0)
import sqlite3
conn = sqlite3.connect('emaildb.sqlite')
cur = conn.cursor()
cur.execute('DROP TABLE IF EXISTS Counts')
cur.execute('''
CREATE TABLE Counts (org TEXT, count INTEGER)''')
fname = input('Enter file name: ')
if (len(fname) < 1): fname = 'mbox-short.txt'
fh = open(fname)
for line in fh:
if not line.startswith('From: '): continue
pieces = line.split()
org = pieces[1].split('@')
cur.execute('SELECT count FROM Counts WHERE org = ? ', (org[1],))
row = cur.fetchone()
if row is None:
cur.execute('''INSERT INTO Counts (org, count)
VALUES (?, 1)''', (org[1],))
else:
cur.execute('UPDATE Counts SET count = count + 1 WHERE org = ?',
(org[1],))
conn.commit()
# https://www.sqlite.org/lang_select.html
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()
print('-----------------done----------------')