首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逐行修改json文件会出现错误UnsupportedOperation: not readable

逐行修改json文件会出现错误UnsupportedOperation: not readable
EN

Stack Overflow用户
提问于 2021-03-31 07:25:53
回答 1查看 35关注 0票数 0

我有一个json文件,我想逐行更新它,但是当我尝试运行下面的函数时,我得到了错误UnsupportedOperation: not readable。

代码语言:javascript
复制
def update_json(json_file):
    with tempfile.TemporaryFile(mode ='w') as tmp:
        with open(json_file) as f:
            print(json_file)
            for json_line in f:
                data = json.loads(json_line)
                if populate_tags(data, param):
                    tmp.write(json.dumps(data) + '\n')

        tmp.seek(0)
        with open(json_file, 'w') as f:
            f.write(tmp.read())

用于更新线路的函数为:

代码语言:javascript
复制
def populate_tags(data, param_values):
    tags={}        
    for l in data['targets']:
        item = l['item'].strip().lower()
        text = l['text'].strip().lower()
        d={'type': item, 'text_value': text}
        key_value = str(d).strip().lower()
        tag = param_values.get(key_value)       
        if tag is None:
            continue        
        tag = str(tag).replace('"','')        
      
        tags[item] = tag
        
        tags[item] = literal_eval(tags[label])
           
        
    data['options'] = {'Tags': dict(tags)}
    
    
    return bool(tags)

异常代码

代码语言:javascript
复制
---------------------------------------------------------------------------
UnsupportedOperation                      Traceback (most recent call last)
<ipython-input-65-b4c1e92652ac> in <module>
     22 
     23 for filename in files:
---> 24     update_json(filename)

<ipython-input-65-b4c1e92652ac> in update_json(json_file)
     13             tmp.seek(0)
     14             with open(json_file, 'w') as f:
---> 15                 f.write(tmp.read())
     16 
     17 

UnsupportedOperation: not readable
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-31 08:25:35

以不正确的模式"w":write-only打开tempfile.TemporaryFile。错误输出清楚地表明了这一点,因为第15行上的唯一读操作是tmp.read()。您需要使用mode="r+"打开tmp才能进行读写。

代码语言:javascript
复制
def update_json(json_file):
    with tempfile.TemporaryFile(mode ='r+') as tmp:
        with open(json_file) as f:
            print(json_file)
            for json_line in f:
                data = json.loads(json_line)
                if populate_tags(data, param):
                    tmp.write(json.dumps(data) + '\n')

        tmp.seek(0)
        with open(json_file, 'w') as f:
            f.write(tmp.read())

Python documentation on file open mode。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66879695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档