【问题标题】:Save .txt file in a dict with specific format将 .txt 文件保存在具有特定格式的字典中
【发布时间】:2020-04-16 18:31:21
【问题描述】:

读取我的 .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

【问题讨论】:

  • 你能提供一个文本文件的样本吗?
  • 您的问题是您将相同的字典_temp 分配给所有self._data。您需要为每个 self._data 复制字典或初始化字典并为其赋值。检查this
  • @jordanm 是的,我添加了一个样本,其他样本看起来像这个,但计数、单位等的其他值。
  • @hadik 嗯...我真的不明白,但我会尝试一下

标签: python class dictionary


【解决方案1】:

你需要复制字典。将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 变量。这样可以确保创建新的 dict,而不是为列表的所有元素重用相同的 dict (copieddata)。 下面我使用.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}]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 2019-10-28
相关资源
最近更新 更多