将字典的一部分写入文本文件

时间:2017-03-01 22:47:41

标签: python list dictionary

我需要创建一个包含两个固定数据集之间的帐号的文本文件。

我需要的输出如下:

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部分并将其写入文本文件?

3 个答案:

答案 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

希望这有帮助并且编码愉快!