数据库中使用VARCHAR类型存储分隔符,分隔符有很多种,用户自已输入的,比如逗号、TAB(\t)、^A(\001)等等。
Python从数据库中读取分隔符,然后对对应的文本进行切分。普通字符没有问题,对于特殊字符,则需要进行处理之后才能正确切分。
每个ID对应的分隔符,需要从数据库中读取。
import MySQLdb
from ast import literal_eval
db = MySQLdb.connect("localhost","user","password","mydb",use_unicode=True)
cursor = db.cursor()
cursor.execute("SELECT sep FROM lxw1 WHERE id = 1")
results = cursor.fetchall()
a=''
for row in results:
a = row[0]
db.close()
print(a,type(a))
##output: \001
print(a=="\001")
##output: False
print(a=="\\001")
##output: True
##从数据库中读取出来的其实是加了转义符的
str="a\001b\001c\001d"
print(str.split(a))
##直接用a,也就是"\\001"切分,显然结果不对
##output: ['a\x01b\x01c\x01d']
print(str.split("\001"))
##用"\001"切分,结果正常
##output: ['a', 'b', 'c', 'd']
## 那么,现在的问题其实是需要把加了转义符的"\\001",转换成正确的特殊字符"\001"
b = literal_eval("'%s'" % a)
print(b,type(b))
##output:
print(b=="\001")
##output: True
print(str.split(b))
##output: ['a', 'b', 'c', 'd']
c = "\\t"
##对于TAB分隔符,也是如此,从数据库中读出来,其实是"\\t"
str2 = "1 2 3 4"
print(str2.split(c))
##output: ['1\t2\t3\t4']
print(str2.split(literal_eval("'%s'" % c)))
##output: ['1', '2', '3', '4']
d = ","
str3 = "x,y,z"
print(str3.split(literal_eval("'%s'" % d)))
##output: ['x', 'y', 'z']
Mark一下。
如果觉得本博客对您有帮助,请 赞助作者 。