我需要创建一个包含两个固定数据集之间的帐号的文本文件。
我需要的输出如下:
someData|acc1|someMoreData
我需要填充的数据位于名为data.txt的文件中。它看起来像这样:
name,acc1,acc2
我将这些数据存储为代码中的字典列表,因为我在另一个进程中循环遍历它。
我尝试的代码如下:
import csv, os
with open('data.txt') as csvfile:
reader = csv.DictReader(csvfile,
fieldnames=['name', 'acc1', 'acc2'])
clientData = list(reader)
file = open('textfile.txt', 'w')
file.write('someData|')
file.write(clientData['acc1'])
file.write('|someMoreData')
file.close()
当我尝试上面的代码时,我得到一个TypeError:list索引必须是整数或切片,而不是str。
如何访问acc1部分并将其写入文本文件?
答案 0 :(得分:1)
您专门将输入转换为列表。这意味着您必须使用整数对其进行索引。此外,您的输入是CSV格式,而不是字典格式。
我不会给你整个解决方案,但是这里有如何调试它并学习一点:
with open('data.txt') as csvfile:
reader = csv.DictReader(csvfile,
fieldnames=['name', 'acc1', 'acc2'])
print "READER:", reader
clientData = list(reader)
print "LIST DATA:", clientData
现在您已了解代码如何看待这些内容,请查看如何使用DictReader以您希望的格式提取数据。
最后,查看循环语句。我假设你有这种格式的多行,并且你想为每一行写一个单独的输出行。您的当前代码只有一行的输出,所以您需要一些模糊的东西
for input_record in reader:
file.write("someData|" + input_record[index] + "|someMoreData"
我留下索引让你弄明白;它应该是" acc1" (字典格式)或 1 (列表格式)。
答案 1 :(得分:0)
你将clientData
投射到一个列表中,它不是一个字典。尝试通过整数索引访问clientData
。
答案 2 :(得分:0)
您遇到的问题是您实际上不完全使用词典,事实上,您正在使用Python的列表。这两种数据结构之间存在显着差异。这是一个例子:
list = [1,2,3,4]
dict = {'one':1, 'two':2, 'three':3, 'four': 4}
在此示例中,可能会发生以下情况:
list[1] #Valid
list['one'] #Invalid
dict[1] #Invalid (Because of a key error)
dict['one'] #Valid
这一切都是因为列表和词典之间的差异而发生的。在列表中,每个值都有一个内存位置,可以通过方括号索引。在字典中,每个值都有一个键,可供其访问。按价值和关键我的意思如下:
dict = {'one':1, 'two':2, 'three':3, 'four': 4}
^ ^
key value
希望这有帮助并且编码愉快!