保存包含阿拉伯语的 Python 2.7 脚本
Saving a Python 2.7 script that contains Arabic
我遇到了一个奇怪的问题。我正在做一个 Twitter-Tweepy-MySQL collection 项目。
我对我的剧本非常满意。例如,如果我 运行 它针对“#London”进行收集 - 没问题。
然而,当我尝试收集 non-Latin 主题标签(例如“#מזל_טוב”)时,我什至无法 保存 脚本,更不用说 运行它。
我按了 Ctrl + S - 没有保存。我尝试 运行 脚本 - 我得到 "Source Must Be Saved Ok to Save?",点击确定 - 没有任何反应。
阿拉伯语和希伯来语主题标签都会出现这种情况,所以我只能认为这里存在 unicode 问题 - 但是当我针对偶然产生 non-Latin 字母表结果的拉丁语主题标签进行收集时,它们会被打印并保存到 MySQL 没问题。
非常感谢任何指点。
罗宾
脚本如下:
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import MySQLdb
import time
import json
conn = MySQLdb.connect ('nyub', 'nyub', 'nyub', 'nyub', charset='utf8')
c = conn.cursor()
ckey = "'nyub'"
csecret = "'nyub'"
atoken = "-'nyub'"
asecret = "'nyub'"
class listener (StreamListener):
def on_data(self, data):
try:
tweet = json.loads(data)
created_at = tweet ["created_at"]
identity = tweet ["id"]
text = tweet ["text"]
status_reply = tweet ["in_reply_to_status_id"]
user_reply = tweet ["in_reply_to_user_id"]
screen_name_reply = tweet ["in_reply_to_screen_name"]
user_id = tweet ["user"]["id"]
user_screen_name = tweet["user"]["screen_name"]
user_location = tweet["user"]["location"]
user_url = tweet["user"]["url"]
user_description = tweet["user"]["description"]
user_followers = tweet["user"]["followers_count"]
user_friends = tweet["user"]["friends_count"]
user_statuses = tweet["user"]["statuses_count"]
user_created = tweet["user"]["created_at"]
user_lang = tweet["user"]["lang"]
coordinates = tweet ["coordinates"]
place = tweet ["place"]
rt_count = tweet ["retweet_count"]
fav_count = tweet ["favorite_count"]
hashtags = []
for hashtag in tweet ["entities"]["hashtags"]:
hashtags.append(hashtag["text"])
urls = []
for url in tweet ["entities"]["urls"]:
urls.append(url["expanded_url"])
c.execute ("INSERT INTO luck (timestamp, tweet_created_at, tweet_id, tweet_text, in_reply_status, in_reply_user_id, in_reply_screen_name, user_id, user_screen_name, user_location, user_url, user_description, user_followers_count, user_friends_count, users_statuses_count, user_created_at, user_lang, tweet_coords, tweet_place, tweet_retweet_count, tweet_fav_count, hashtags, urls) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",
((time.time()), created_at, identity, text, status_reply, user_reply, screen_name_reply, user_id, user_screen_name, user_location, user_url, user_description, user_followers, user_friends, user_statuses, user_created, user_lang, coordinates, place, rt_count, fav_count, str(hashtags), str(urls)))
conn.commit ()
print (text)
return True
except BaseException, e:
print "failed on data", str(e)
time.sleep(5)
def on_error (self, status):
print status
auth = OAuthHandler(ckey, csecret)
auth.set_access_token(atoken, asecret)
twitterStream = Stream(auth, listener())
twitterStream.filter(track=["#מזל_טוב"])
在脚本的开头(第一行)添加:
# -*- coding: utf-8 -*-
当然还要确保它确实以 utf-8 格式保存。
将此添加为您的 python 文件的第一行(如果您将其与 #/bin/bash 一起使用,则将其添加为第二行)
# -*- coding: utf-8 -*-
并使用这个
u"#מזל_טוב" # Unicode string in python 2.7
而不是
"#מזל_טוב"
后者只适用于python 3
我遇到了一个奇怪的问题。我正在做一个 Twitter-Tweepy-MySQL collection 项目。
我对我的剧本非常满意。例如,如果我 运行 它针对“#London”进行收集 - 没问题。
然而,当我尝试收集 non-Latin 主题标签(例如“#מזל_טוב”)时,我什至无法 保存 脚本,更不用说 运行它。
我按了 Ctrl + S - 没有保存。我尝试 运行 脚本 - 我得到 "Source Must Be Saved Ok to Save?",点击确定 - 没有任何反应。
阿拉伯语和希伯来语主题标签都会出现这种情况,所以我只能认为这里存在 unicode 问题 - 但是当我针对偶然产生 non-Latin 字母表结果的拉丁语主题标签进行收集时,它们会被打印并保存到 MySQL 没问题。
非常感谢任何指点。
罗宾
脚本如下:
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import MySQLdb
import time
import json
conn = MySQLdb.connect ('nyub', 'nyub', 'nyub', 'nyub', charset='utf8')
c = conn.cursor()
ckey = "'nyub'"
csecret = "'nyub'"
atoken = "-'nyub'"
asecret = "'nyub'"
class listener (StreamListener):
def on_data(self, data):
try:
tweet = json.loads(data)
created_at = tweet ["created_at"]
identity = tweet ["id"]
text = tweet ["text"]
status_reply = tweet ["in_reply_to_status_id"]
user_reply = tweet ["in_reply_to_user_id"]
screen_name_reply = tweet ["in_reply_to_screen_name"]
user_id = tweet ["user"]["id"]
user_screen_name = tweet["user"]["screen_name"]
user_location = tweet["user"]["location"]
user_url = tweet["user"]["url"]
user_description = tweet["user"]["description"]
user_followers = tweet["user"]["followers_count"]
user_friends = tweet["user"]["friends_count"]
user_statuses = tweet["user"]["statuses_count"]
user_created = tweet["user"]["created_at"]
user_lang = tweet["user"]["lang"]
coordinates = tweet ["coordinates"]
place = tweet ["place"]
rt_count = tweet ["retweet_count"]
fav_count = tweet ["favorite_count"]
hashtags = []
for hashtag in tweet ["entities"]["hashtags"]:
hashtags.append(hashtag["text"])
urls = []
for url in tweet ["entities"]["urls"]:
urls.append(url["expanded_url"])
c.execute ("INSERT INTO luck (timestamp, tweet_created_at, tweet_id, tweet_text, in_reply_status, in_reply_user_id, in_reply_screen_name, user_id, user_screen_name, user_location, user_url, user_description, user_followers_count, user_friends_count, users_statuses_count, user_created_at, user_lang, tweet_coords, tweet_place, tweet_retweet_count, tweet_fav_count, hashtags, urls) VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",
((time.time()), created_at, identity, text, status_reply, user_reply, screen_name_reply, user_id, user_screen_name, user_location, user_url, user_description, user_followers, user_friends, user_statuses, user_created, user_lang, coordinates, place, rt_count, fav_count, str(hashtags), str(urls)))
conn.commit ()
print (text)
return True
except BaseException, e:
print "failed on data", str(e)
time.sleep(5)
def on_error (self, status):
print status
auth = OAuthHandler(ckey, csecret)
auth.set_access_token(atoken, asecret)
twitterStream = Stream(auth, listener())
twitterStream.filter(track=["#מזל_טוב"])
在脚本的开头(第一行)添加:
# -*- coding: utf-8 -*-
当然还要确保它确实以 utf-8 格式保存。
将此添加为您的 python 文件的第一行(如果您将其与 #/bin/bash 一起使用,则将其添加为第二行)
# -*- coding: utf-8 -*-
并使用这个
u"#מזל_טוב" # Unicode string in python 2.7
而不是
"#מזל_טוב"
后者只适用于python 3