使用Python分类MySql数据库中的数字范围

时间:2015-04-21 15:45:04

标签: python mysql

我在MySQL中有一个表,每周的范围属于每个人,它们看起来像

  

(3-15,21-30,33-35)

     

(3-15)

     

(4-14)

     

(21-30,33-35)

等等。我想分割每个范围,并将每个人分成一个学期,第一学期有3-19周,第二学期有20-35。如果任何一个学生有3到15周的学期属于第一学期,如果他们的学期为35周,属于两个学期。

如何为此编写Python代码?

到目前为止我的代码只获得了前2个字符,以确定它是一个数字:

import sqlite3
import csv

conn = sqlite3.connect('RefinedDatabase.db')
cursor = conn.cursor()

selectRow = cursor.execute( "SELECT  Weeks FROM staffDataBase")
fetchrow = cursor.fetchone()

while fetchrow != None:

    fetchrow =  str(fetchrow).replace(',)','').replace('(','').replace('u\'','').replace("'","").replace('u"', '').replace('"','').replace(')','')
    if fetchrow[0:2].isdigit  :
        print fetchrow[0:2]

    fetchrow = cursor.fetchone()

conn.close()

print ("All Done!!")

1 个答案:

答案 0 :(得分:0)

如果你想处理字符串,你应该花点时间学习正则表达式(https://docs.python.org/2/library/re.html#module-re)!它们最初有点可怕,但它们是一个令人难以置信的工具。

查看https://docs.python.org/2/library/re.html#re.findall

要获得行中的所有范围,您可以执行类似

的操作
r = re.findall(r"[0-9]+,[0-9]+", line)

你会得到

>>> line = "(3-15,21-30,33-35)"
>>> r = re.findall(r"([0-9]+)\-([0-9]+)", line)
>>> r
[('3', '15'), ('21', '30'), ('33', '35')]

您可以测试正则表达式(并学习)'直播':http://www.regexr.com/ 特别是对于python测试:https://regex101.com/

注意:如果文件中有多余的字符(例如空格),则可能需要使表达式稍微复杂一些。检查\s模式。