python - 将 .txt 文件保存在具有特定格式的字典中
问题描述
阅读我的 .txt 文件并将其保存在 dict 中时遇到问题。这是我的以下代码:
def __init__(self, folder_path):
os.chdir(folder_path)
self._path = folder_path
self._data = {}
_files = glob.glob('*.txt')
_temp = {}
for dat in _files:
_temp.clear()
with open(dat,"r",encoding="utf-8") as f:
for item in f:
if item != '\n':
custom = (item.strip('\n').split('='))
_temp[custom[0]] = custom[1]
self._data[dat] = _temp
print(self._data)
这是输出:
{'RC0603FR-07100KL.txt': {'count': '20', 'value': 'TPS73033', 'package': 'SOT-23-5'},
'RC0805FR-07100KL.txt': {'count': '20', 'value': 'TPS73033', 'package': 'SOT-23-5'},
'TPS73033DBVT.txt': {'count': '20', 'value': 'TPS73033', 'package': 'SOT-23-5'}}
确切的问题是,最后一个值会覆盖所有其他值。例如。这应该是这样的:
{'RC0603FR-07100KL.txt': {'count': '100', 'value': '100k', 'package': 'Chip'},
'RC0805FR-07100KL.txt': {'count': '50', 'value': '10n', 'package': 'Cap'},
'TPS73033DBVT.txt': {'count': '20', 'value': 'TPS73033', 'package': 'SOT-23-5'}}
我做错了什么?
.txt 文件示例:
count=50
value=100k
unit=Ohm
package=0603
description=Chip Resistor
supplier=Digikey
supplierpartnumber=311-100KHRCT-ND
price=0.009
currency=CHF
解决方案
你需要复制字典。替换self._data[dat] = _temp
为self._data[dat] = _temp.copy()
检查这个例子:
data = [
{'a':1, 'b':1},
{'a':2, 'b':2},
]
copieddata = []
temp = {}
for d in data:
temp.clear()
for k, v in d.items():
temp[k] = v
copieddata.append(temp)
这将具有copieddata
:
[{'a': 2, 'b': 2}, {'a': 2, 'b': 2}]
因为,您基本上使用相同的变量temp
并将其分配给列表(copieddata
)的不同元素。但是您想要的是创建不同dict
的并将其分配给列表的元素,因此您需要复制temp
变量。copieddata
这样可以确保创建新的 dict,并且不会为列表 ( )的所有元素重用相同的 dict 。下面我曾经.copy()
添加到列表中,并且按预期工作。
data = [
{'a':1, 'b':1},
{'a':2, 'b':2},
]
copieddata = []
temp = {}
for d in data:
temp.clear()
for k, v in d.items():
temp[k] = v
copieddata.append(temp.copy())
复制的数据现在是:
[{'a': 1, 'b': 1}, {'a': 2, 'b': 2}]
推荐阅读
- assembly - 从哪里获取硬件的 I/O 端口地址分配?
- javascript - 让 Discord Selfbot 加入服务器
- c++ - 安装 v142 以使用 v142 构建工具进行构建
- amazon-web-services - AWS Amplify Cognito 中的禁用用户仍然可以访问 API 中的数据
- python - 如何在 openpyxl 表中禁用自动过滤器?
- flutter - 如何在 iOS 上使用 OpenCV 和 dart:ffi
- javascript - 我如何使用模块来传递反应组件?
- python - Beautifulsoup 中的 AttributeError
- scala - 如何配置 GraalVm 20.1.0 以使用 Intellji 的 sbt 插件运行
- excel - 循环通过集合时尝试设置自定义对象时出错