我在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!!")
答案 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
模式。