[英]How to properly print a list of unicode characters in python?
我正在嘗試在 python 字符串中搜索表情符號。 所以我有,例如,
em_test = ['\U0001f680']
print(em_test)
['🚀']
test = 'This is a test string 💰💰🚀'
if any(x in test for x in em_test):
print ("yes, the emoticon is there")
else:
print ("no, the emoticon is not there")
yes, the emoticon is there
如果在 em_test 中搜索
'這是一個測試字符串💰💰🚀'
我真的可以找到它。
所以我制作了一個 csv 文件,其中包含我想要由他們的 unicode 定義的所有表情符號。 CSV 如下所示:
\\U0001F600
\\U0001F601
\\U0001F602
\\U0001F923
當我導入並打印它時,我不會得到表情符號,而只是文本表示:
['\\U0001F600',
'\\U0001F601',
'\\U0001F602',
'\\U0001F923',
...
]
因此我不能用它來在另一個字符串中搜索這些表情符號......我不知何故知道雙反斜杠 \\ 只是一個單斜杠的表示,但不知何故unicode閱讀器沒有得到它......我不知道我是什么我不見了
有什么建議么?
您可以使用.decode('unicode-escape')
解碼這些 Unicode 轉義序列。 但是, .decode
是一種bytes
方法,因此如果這些序列是文本而不是字節,您首先需要將它們編碼為字節。 或者,您可以(可能)以二進制模式打開 CSV 文件,以便將這些序列作為bytes
而不是文本字符串讀取。
只是為了好玩,我還將使用unicodedata
來獲取這些表情符號的名稱。
import unicodedata as ud
emojis = [
'\\U0001F600',
'\\U0001F601',
'\\U0001F602',
'\\U0001F923',
]
for u in emojis:
s = u.encode('ASCII').decode('unicode-escape')
print(u, ud.name(s), s)
輸出
\U0001F600 GRINNING FACE 😀
\U0001F601 GRINNING FACE WITH SMILING EYES 😁
\U0001F602 FACE WITH TEARS OF JOY 😂
\U0001F923 ROLLING ON THE FLOOR LAUGHING 🤣
這應該比使用ast.literal_eval
。 如果您以二進制模式讀取數據,它會更快,因為它避免了讀取文件時的初始解碼步驟,並允許您消除.encode('ASCII')
調用。
您可以使用
u.encode('Latin1').decode('unicode-escape')
但這對於您的表情符號數據來說不是必需的。 正如我之前所說,如果您以二進制模式打開文件以避免需要對其進行編碼,那就更好了。
1. 保持你的 csv 原樣:
這是一個臃腫的解決方案,但使用ast.literal_eval
有效:
import ast
s = '\\U0001F600'
x = ast.literal_eval('"{}"'.format(s))
print(hex(ord(x)))
print(x)
我得到0x1f600
(這是正確的字符代碼)和一些表情符號(😀)。 (好吧,我不得不將一個奇怪的字符從我的控制台復制/粘貼到這個答案文本字段,但這是我最后的控制台問題,否則有效)
只需用引號括起來就可以讓ast
將輸入作為字符串。
2.直接使用字符代碼
也許通過存儲字符代碼本身而不是\\U
格式會更好:
print(chr(0x1F600))
完全一樣(所以ast
有點矯枉過正)
您的 csv 可能包含:
0x1F600
0x1F601
0x1F602
0x1F923
然后chr(int(row[0],16))
會在閱讀時起作用:例如,如果 CSV 中有 1 行(或第一行)
with open("codes.csv") as f:
cr = csv.reader(f)
codes = [int(row[0],16) for row in cr]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.