从文件中读取并添加到没有列表的字典
Read from file and add to dictionary without lists
这是我的文本文件的示例:
A, 100 101 102
B, 103 104
我想从这个文件中读取并创建一个字典。
这是我的代码:
def readFromFile():
d = {} # empty dictionary
with open('file.txt') as fr: #read from text file
for line in fr.readlines(): # reading text file by line
k, v = line.split(',') # splitting the line on text file by ',' to define the key and values
v = v.split() # splitting the values in each key into a list
for n in range( len(v) ):
v[n] = int(v[n]) # convert student id in list from str to int
d[k] = v # build dictionary with keys and its values
return d
这是我的输出结果:
{'A': [100, 101, 102], 'B': [103, 104]}
我想使用此函数将 A 的值更新为 int 209:
def writeToFile(d):
with open('file.txt', 'w') as fw:
for k,v in d.items():
print(f'{k}, {v}', file = fw)
我的文件会这样写:
A, [100, 101, 102, 209]
这会导致函数 readFromFile() 抛出错误,因为文本文件的格式不再相同。
文本文件的期望输出是这样的:
A, 100 101 102 209
问题是您没有以预期的格式写入文件。您需要编写与您阅读的格式相同的格式。
def write_to_file(filename, d):
with open(filename, 'w') as fw:
for k,v in d.items():
line_data = ' '.join(map(str, v))
print('{}, {}'.format(k, line_data), file = fw)
您的 readFromFile 函数未验证格式。所以它当然会抛出错误——只要捕获任何错误并将其报告为错误的文件内容即可。
为了扩展 line_data,您希望将一个列表组合成一个字符串,用 space 分隔,因此您将使用 space 作为分隔符,并且在对 https://docs.python.org/3/library/stdtypes.html#str.join
的调用中作为可迭代对象列出
当然,您不能使用str.join 来连接整数。您需要将它们全部转换为 str,因此您将 map(str, v) 作为 iterable 传递给 join。 built-in 函数 https://docs.python.org/3/library/functions.html#map 只是将函数(在本例中转换为 str)应用于每个项目。
这是我的文本文件的示例:
A, 100 101 102
B, 103 104
我想从这个文件中读取并创建一个字典。
这是我的代码:
def readFromFile():
d = {} # empty dictionary
with open('file.txt') as fr: #read from text file
for line in fr.readlines(): # reading text file by line
k, v = line.split(',') # splitting the line on text file by ',' to define the key and values
v = v.split() # splitting the values in each key into a list
for n in range( len(v) ):
v[n] = int(v[n]) # convert student id in list from str to int
d[k] = v # build dictionary with keys and its values
return d
这是我的输出结果:
{'A': [100, 101, 102], 'B': [103, 104]}
我想使用此函数将 A 的值更新为 int 209:
def writeToFile(d):
with open('file.txt', 'w') as fw:
for k,v in d.items():
print(f'{k}, {v}', file = fw)
我的文件会这样写:
A, [100, 101, 102, 209]
这会导致函数 readFromFile() 抛出错误,因为文本文件的格式不再相同。
文本文件的期望输出是这样的:
A, 100 101 102 209
问题是您没有以预期的格式写入文件。您需要编写与您阅读的格式相同的格式。
def write_to_file(filename, d):
with open(filename, 'w') as fw:
for k,v in d.items():
line_data = ' '.join(map(str, v))
print('{}, {}'.format(k, line_data), file = fw)
您的 readFromFile 函数未验证格式。所以它当然会抛出错误——只要捕获任何错误并将其报告为错误的文件内容即可。
为了扩展 line_data,您希望将一个列表组合成一个字符串,用 space 分隔,因此您将使用 space 作为分隔符,并且在对 https://docs.python.org/3/library/stdtypes.html#str.join
的调用中作为可迭代对象列出当然,您不能使用str.join 来连接整数。您需要将它们全部转换为 str,因此您将 map(str, v) 作为 iterable 传递给 join。 built-in 函数 https://docs.python.org/3/library/functions.html#map 只是将函数(在本例中转换为 str)应用于每个项目。