当前位置: 首页 > 知识库问答 >
问题:

编写单独的JSON条目Python时遇到问题

唐永春
2023-03-14

希望有人能告诉我为什么会这样。我这里有三部电影,我试图系统地获取每一部电影的JSON数据,并将其打印到一个单独的文件中,名为data\u fetch。txt。我正在使用的站点是omdbapi。通用域名格式。我能够成功地获得所有电影的JSON,但由于一些奇怪的原因,当它被编写时,它被编写成一个条目。因此,当我打开我刚刚编写的文件并对条目进行计数时,计数器只会在应该有3个单独条目的情况下吐出1个条目。所以3个电影标题应该有3个JSON。我之所以想将每个JSON分离到自己的条目中,是因为我想获取JSON中的“类型”。此外,我不确定这是否与问题有关,但当我将每个JSON条目打印到python解释器时,我得到了这个错误值error:Extra data:

代码如下:

import urllib2, time, csv, json, re
def get_url(title):
    base_url = 'http://www.omdbapi.com/?i=&t='
    title_url = str(title)
    total_url = base_url + title_url
    return total_url

def get_json():
    file = open('data_fetch.txt', 'wb')
    lst = [['2010', 'Colin Firth', "The King's Speech "], ['2009', 'Jeff Bridges', 'Crazy Heart '], ['2008', 'Sean Penn', 'Milk ']]
    for item in lst:
        movie = item[2].strip()
        if ' ' in movie:
            title = movie.replace(' ', '%20')
        else:
            title = movie

        reply = urllib2.urlopen(get_url(title))
        html_doc = reply.read()
        file.write(html_doc)
        print html_doc

        time.sleep(5)
    file.close()
def counter():
    file = open('data_fetch.txt', 'rU')
    counter = 0 
    for entry in file: 
        counter+=1
    return counter
    file.close()

print counter() # this only prints 1

def json_data():
    file = open('data_fetch.txt', 'rU')
    for entry in file: 
        decoded = json.loads(entry)
        print decoded
    file.close()
jsond_data() #ValueError: Extra data:

希望有人能帮我,过去3个小时我一直在摆弄这个。我正在使用Python 2.7。

更新:这是我文件的内容:data\u fetch。txt:

{“Title”:“The King’s Speech”,“Year”:“2010”,“Rated”:“R”,“Released”:“2010年12月25日”,“Runtime”:“118分钟”,“流派”:“传记、戏剧、历史”,“导演”:“Tom Hooper”,“编剧”:“David Seidler(剧本)”,“演员”:“Colin Firth,Helena Bonham Carter,Derek Jacobi,Robert Portal”,“情节”:“关于大不列颠及北爱尔兰联合王国国王乔治六世的故事,他即兴登上王位,以及帮助这位不确定的君主变得值得拥有的言语治疗师。”,“Language”:“English”,“Country”:“UK,USA,Australia”,“Awards”:“获得4项奥斯卡奖。另有104项获奖

共有1个答案

潘驰
2023-03-14

您必须在每行末尾添加新行,否则所有内容都会写入同一行:

file.write(html_doc + '\n')

顺便说一下对您的代码的一些改进:

import urllib2, time, csv, json, re

def get_url(title):
    base_url = 'http://www.omdbapi.com/?i=&t='
    title = title.strip().replace(' ', '%20')
    return base_url + title


def get_json(lst, filename):
    data = []
    for year, actors, title in lst:
        data.append(urllib2.urlopen(get_url(title)).read())
        time.sleep(5)

    # save data to file
    with open(filename, 'wb') as f:
        json.dump(data, f)


def json_data(filename):
    with open(filename, 'rU') as f: 
        return json.load(f)


def counter(filename):
    return len(json_data(filename))

lst = [['2010', 'Colin Firth', "The King's Speech "], ['2009', 'Jeff Bridges', 'Crazy Heart '], ['2008', 'Sean Penn', 'Milk ']]
filename = 'data_fetch.txt'
get_json(lst, filename)
print counter(filename)
print json_data(filename)
 类似资料:
  • 我正在尝试将json转储打印到多行上。目前它是在一行打印。 第三步:结果如下: 我的目标是将结果打印在多行上,使其看起来像步骤1中的json.dumps

  • 我正在尝试在最新的intellij(community edition)中使用Java9: IntelliJ IDEA 2016.3 Build#IC-163.7743.44,2016年11月17日构建jre:1.8.0_112-release-408-b2 x86 jvm:OpenJDK服务器VM由JetBrains S.r.o. 有人知道如何解决这个问题吗?还是我应该等到他们发布另一个版本?

  • 当我使用inspector工具时,它表示元素是一个输入框。我不知道如何解决这个问题,因为我对python非常缺乏经验 输出是一个空字符串,尽管网站显示了一封电子邮件供我使用。

  • 如果这个问题是重复的,我很抱歉,但我已经在这个网站上跟踪了很多页面,试图找到一个答案,但我还没有找到一个可行的答案。我使用过的一些页面包括: PyGame鼠标点击检测 自己找不到rect? 如何碰撞。pygame中的rect工作 这可能是我缺乏编码理解,如果是这样,我道歉。然而,我发现最“有帮助”的页面是第一个链接。用树懒的第一个回答,这似乎很简单,也是我能做的事情。一旦他的方法不起作用,我试着在

  • 我从来没有用过红宝石,我想我应该试一试。安装似乎进行得很顺利(我想)。在我使用创建服务器后,麻烦就开始了,然后去设置路由,这样新项目就会出现,而不是红宝石欢迎屏幕。它产生的误差是 未初始化常量欢迎控制器 我在route controller中设置了路径,如下所示 我漏了一步吗?我正在使用installrails的说明在Windows7上安装rails。通用域名格式 这是请求的完整跟踪

  • 当尝试使用pip和conda安装Dash包时,我收到一个错误,说明找不到该包。所有其他软件包都可以使用pip安装 仪表板组件:https://plot.ly/dash/getting-started 例外情况:回溯(最近一次调用last):文件“C:\Users\Owner\Anaconda3\lib\site packages\pip\basecommand.py”,第215行,主状态为self