微信搜索lxw1234bigdata | 邀请体验:数阅–数据管理、OLAP分析与可视化平台 | 赞助作者:赞助作者

Python从变量读取的特殊字符切分字符串问题

编程语言 lxw1234@qq.com 15520℃ 0评论

数据库中使用VARCHAR类型存储分隔符,分隔符有很多种,用户自已输入的,比如逗号、TAB(\t)、^A(\001)等等。

Python从数据库中读取分隔符,然后对对应的文本进行切分。普通字符没有问题,对于特殊字符,则需要进行处理之后才能正确切分。

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从变量读取的特殊字符切分字符串问题

喜欢 (5)
分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址