Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python urllib.urlencode问题_Python_Json_Api_Csv_Urllib - Fatal编程技术网

Python urllib.urlencode问题

Python urllib.urlencode问题,python,json,api,csv,urllib,Python,Json,Api,Csv,Urllib,我正在尝试编写一个python脚本,将查询发送到TweetMountains.comAPI 我们的想法是,它将像这样运行—— 读取CSV tweet文件>构造查询>询问API>格式化JSON响应>写入CSV文件 到目前为止,我已经想到了这个- import csv import urllib import os count = 0 TweetList=[] ## Creates empty list to store tweets. TweetWriter = csv.writer(ope

我正在尝试编写一个python脚本,将查询发送到TweetMountains.comAPI

我们的想法是,它将像这样运行—— 读取CSV tweet文件>构造查询>询问API>格式化JSON响应>写入CSV文件

到目前为止,我已经想到了这个-

import csv
import urllib
import os

count = 0

TweetList=[] ## Creates empty list to store tweets.

TweetWriter = csv.writer(open('test.csv', 'w'), dialect='excel', delimiter=' ',quotechar='|')
TweetReader = csv.reader(open("C:\StoredTweets.csv", "r"))

for rows in TweetReader:

    TweetList.append(rows)

#print TweetList [0]

for rows in TweetList:

    data = urllib.urlencode(TweetList[rows])
    connect = httplib.HTTPConnection("http://data.tweetsentiments.com:8080/api/analyze.json?q=")
    connect.result = json.load(urllib.request("POST", "", data))
        TweetWriter.write(result)
但当它运行时,我得到“第20行,data=urllib.urlencode(TweetList[rows])类型错误:列表索引必须是整数,而不是列表”

我知道我的列表“TweetList”正在按照我的意愿存储推文,但我认为我没有正确使用urllib.urlencode。API要求发送的查询如下——

(要分析的文本)

因此,我们的想法是urllib.urlencode只需将tweets添加到地址的末尾即可进行查询


在看了这么多示例后,最后四行代码变得一团糟。非常感谢您的帮助。

我不能100%确定您想做什么,因为我不知道您正在阅读的文件的格式,但这部分看起来很可疑:

for rows in TweetList:
    data = urllib.urlencode(TweetList[rows])
由于TweetList是一个列表,因此for循环在每次迭代中将列表中的一个值放入行中,例如:

list = [1, 2, 3, 4]
for num in list:
    print num
将打印1234。但如果:

list = [1, 2, 3, 4]
for num in list:
    print list[num]
最终将出现以下错误:Indexer错误:列表索引超出范围

你能详细说明一下你正在阅读的文件的格式吗


编辑 如果我理解正确,你需要这样的东西:

tweets = []
tweetReader = csv.reader(open("C:\StoredTweets.csv", "r"))

for row in tweetReader:
    tweets.append({ 'tweet': row[0], 'date': row[1] })

for row in tweets:
    data = urllib.urlencode(row)
    .....

是的,当然,我正在读一个有两个字段的CSV。一个包含推文,另一个包含创建的日期。您所说的非常有意义“[rows]”部分是为了让脚本能够将创建的每条推文和日期附加到API url的末尾。对不起,我把你弄糊涂了!TweetList是一个包含列表的列表,因此:对于TweetList中的行,每次迭代都会在单词列表中生成文件中的行。这就是为什么你会犯这样的错误。您遇到的另一个问题是urllib.urlencode应该与dict对象而不是list对象一起传递,因为您需要具有值的键。我会用一些可能会让你继续的东西来编辑我的答案。干得好!似乎很有效…谢谢你,我真的很感谢你的帮助。