我有一个json文件,其中包含从Tweepy挖掘的推文。为了获得每条推文的情绪分析,我试图使用www.text-processing.com上的API。您可以在下面查看我现在的(有缺陷的)代码。
fname = 'python.json'
with open(fname, 'r') as f:
for line in f:
tweet = json.loads(line)
# Draw out the text from each tweet
tweet_words = tweet['text']
bash_com = 'curl -d "text={}".format(tweet_words) http://text-processing.com/api/sentiment/'
subprocess.Popen(bash_com)
output = subprocess.check_output(['bash','-c', bash_com])
with open('sentiment.json', 'w') as s:
s.write(output)
它返回以下错误:
CalledProcessError: Command '['bash', '-c', 'curl -d "text={}".format(tweet_words) http://text-processing.com/api/sentiment/']' returned non-zero exit status 1
我推测这主要是因为我使用format()函数来命令通过终端(通过子进程模块)。我想在我的json文件中为每条推文运行的终端命令是:
curl -d "text=word" http://text-processing.com/api/sentiment/
有谁知道一个好的解决方案?谢谢!
答案 0 :(得分:1)
bash_com
等于'curl -d "text={}".format(tweet_words) http://text-processing.com/api/sentiment/'
你没有调用format
因为它在字符串里面。
你不应该这样做,因为它不安全,你可以直接使用subprocess.check_output
:
output = subprocess.check_output(['curl', '-d', "text=" + tweet_words, 'http://text-processing.com/api/sentiment/'])
但您应该使用HTTP库,例如请求:
requests.post('http://text-processing.com/api/sentiment/', {'text': tweet_words})