数据库中使用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 <class 'str'> 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: <class 'str'> 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一下。
如果觉得本博客对您有帮助,请 赞助作者 。
转载请注明:lxw的大数据田地 » Python从变量读取的特殊字符切分字符串问题