2017-03-01 51 views
-1

我需要创建一个包含两个固定数据集之间帐号的文本文件。将字典的一部分写入文本文件

我需要的输出如下:

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() 

当我尝试上面的代码,我得到一个类型错误:列表索引必须是整数或片,不海峡。

如何访问acc1部分并将其写入文本文件?

+0

这是不是很清楚你想要达到什么。输入和输出文件是否有多行? –

+0

输入有时会,有时不会。输出将有多行。 – burappi

+0

那么'someData'和'someMoreData'在每一行都是一样的?像someData | 1 | someMoreData; someData | 2 | someMoreData; someData | 3 | someMoreData'? –

回答

0

你正在铸造clientData到一个列表,这不是一个字典。尝试使用整数索引访问clientData

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”(字典格式)或(列表格式)。

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 

希望这个帮助和快乐的编码!