社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

将项目从python文件写入字典

bbfav360 • 3 年前 • 1472 次点击  

我试图从一个文件中编写列表,并将它们定义为字典中的独立值。文本文件的外观如下所示:

[12, 13, 14]
[87, 45, 32]
...

然后字典看起来像这样:

{"score_set0": [12, 13, 14], "score_set1": [87, 45, 32]...}

这是我到目前为止得到的代码,但它只返回一个空字典

def readScoresFile(fileAddr):
    dic = {}
    i = 0
    with open(fileAddr, "r") as f:
        x = len(f.readlines())
        for line in f:
            dic["score_set{}".format(x[i])] = line
            i += 1
    return dic

我只在10年级的GCSE水平(英国OCR教学大纲,如果有帮助的话)上编程。谢谢大家的帮助

我也尝试在没有pickle模块的情况下实现这一点

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/133475
 
1472 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Samwise
Reply   •   1 楼
Samwise    3 年前

如果您试图将这些行转换为实际的Python列表,我建议使用 json 单元(另一个选择是 ast.literal_eval ,因为在本例中,语法恰好相同。)

import json

def read_scores_file(file_path):
    with open(file_path) as f:
        return {
            f"score_set{i}": json.loads(line)
            for i, line in enumerate(f)
        }
ShadowRanger
Reply   •   2 楼
ShadowRanger    3 年前

x = len(f.readlines()) 消耗了你的整个文件,所以你接下来的循环就结束了 f 正在迭代耗尽的文件句柄,看不到剩余的行,并且立即存在。

这里不需要预先检查长度(也是你唯一使用的长度) x 试图给它编制索引,这毫无意义;你避开了 TypeError 仅仅是因为循环从未运行过),所以只需忽略这一点,然后使用 enumerate 要边走边获取数字,请执行以下操作:

def readScoresFile(fileAddr):
    dic = {}
    with open(fileAddr, "r") as f:
        for i, line in enumerate(f):  # Let enumerate manage the numbering for you
            dic["score_set{}".format(i)] = line  # If you're on 3.6+, dic[f'score_set{i}'] = line is nicer
    return dic

请注意,这实际上并不会将输入行转换为 list s的 int (你的原始代码也没有)。如果你想这样做,你可以改变:

dic[f'score_set{i}'] = line

致:

dic[f'score_set{i}'] = ast.literal_eval(line)  # Add import ast to top of file

要将该行解释为Python文字,或:

dic[f'score_set{i}'] = json.loads(line)  # Add import json to top of file

将每一行解释为JSON(速度更快,但支持的Python类型更少,一些合法的Python文本不是合法的JSON)。

一般来说,你根本不想使用 .readlines() ; 只需在文件句柄上进行迭代,就可以激活这些行,并避免与文件大小成比例的内存需求。(坦白地说,如果他们在Py3中处理掉它,我会更喜欢,因为 list(f) 如果你真的需要它,它也会得到同样的结果,而且它不会创建一个可见的方法来鼓励你经常做“错误的事情”)。

通过逐行操作,您最终可以存储所有 数据 ,但这比将解析后的数据存储在 dict 所有的字符串数据都来自 列表 .