我正在尝试在python中运行一段代码,在这里我必须读取一个包含Json格式代码的filename.txt文件。但是我在json值中有一些Unicode值。该文件非常大,但我在文件中发现一个Unicode为֠
Python的unicode为u"\u05A0"
您可以参考此链接以获取有关Unicode Unicode Character 'HEBREW ACCENT TELISHA GEDOLA' (U+05A0)
的更多信息。我的Python代码看起来像
import MySQLdb
import json
db = MySQLdb.connect(host="10.233.188.84", # your host, usually localhost
user="root", # your username
passwd="freebird@123", # your password
db="Practice_For_Json",) # name of the data base
#cursor = db.cursor()
json_file = open('asda.txt', 'r' )
file_data = json.load(json_file)
print(file_data)
print(type(file_data))
datas = file_data['datads']
print(datas)
for data in datas:
ex_statement = "Insert into `tablename` values {first_col '"+str(data['first_col'])+"'}, {second_col '"+str(data['second_col'])+"'});"
# cursor.execute(ex_statement)
db.close()
我的杰森(Json)样子:
{"datads" :[{
"first_col" : "SoomeVAlue_1",
"second_col" : "SomeValue_1_1"
},
{
"first_col" : " Unicode_Start ֠ Unicode_End",
"second_col" : "SomeValue_2_2"
}]}
以上代码的输出为:
{u'datads': [{u'first_col': u'SoomeVAlue_1', u'second_col': u'SomeValue_1_1'}, {u'first_col': u' Unicode_Start \u05a0 Unicode_End', u'second_col': u'SomeValue_2_2'}]}
<type 'dict'>
[{u'first_col': u'SoomeVAlue_1', u'second_col': u'SomeValue_1_1'}, {u'first_col': u' Unicode_Start \u05a0 Unicode_End', u'second_col': u'SomeValue_2_2'}]
Traceback (most recent call last):
File "abc.py", line 21, in <module>
ex_statement = "Insert into `tablename` values {first_col '"+str(data['first_col'])+"'}, {second_col '"+str(data['second_col'])+"'});"
UnicodeEncodeError: 'ascii' codec can't encode character u'\u05a0' in position 15: ordinal not in range(128)
运行此代码时,标题出现错误。
我正在SSH shell中使用Python 2.7。
请帮助我。
答案 0 :(得分:1)
在Python2中处理unicode时,确保所有字符串均为 unicode 字符串非常重要,否则会出现问题。因此,这行是有问题的:
ex_statement = "Insert into `tablename` values {first_col '"+str(file_data['first_col'])+"'}, {second_col file_data '"+str(['first_col'])+"'});"
如果Unicode取消包含非ASCII字符,则调用str
将导致Unicode对象引起UnicodeEncodeError
。所以
str(file_data['first_col'])
应该是
unicode(file_data['first_col'])
为避免Python可能破坏最终字符串,例如,应通过在所有字符串文字前加上u
作为前缀来使它们成为Unicode文字
u"Insert into `tablename` values {first_col '"
这些步骤将确保您的语句是unicode。根据数据库的配置,可以使用unicode语句,或者您可能需要将该语句编码为数据库所需的任何编码方式。
最后,手动创建这样的语句是不安全的,并且可能难以正确处理-查看parameter substitution。正确构造的语句可能如下所示:
ex_statement = u"INSERT INTO MYTABLE (col1, col2) VALUES (%s, %s)"
cursor.execute(ex_statement, (u'foo', u'bar'))
答案 1 :(得分:-1)
我想你可以试试看,
List<String> titles = Arrays.asList("First Name", "Last Name");
for (FirstClass first : firstClassList) {
for (SecondClass second : first.getSecondClassList()) {
for (ThirdClass third : second.getThirdClassList()) {
if(!titles.contains(third.getField())) {
second.getThirdClassList().remove(third);
}
}
}
}