读取制表符分隔文件并将每个列分配给单独的变量

时间:2014-11-26 05:48:45

标签: python dictionary compiler-errors

以下python代码读取包含多个列的制表符分隔文件。我将每个列存储在一个单独的变量中,然后尝试将列存储到字典中并打印出字典的值。

import csv
dic1={}
dic2={}
with open("Table.tsv") as samplefile:
    reader = csv.reader(samplefile, delimiter="\t")
    columns = zip(*reader)
    for column in columns:
        A, B, C, D = columns #store the columns into separate variables

dic1[A] = samplefile # storing a specific variable (column) into a dictionary 
print (dic1[A]) 

问题:我无法打印出包含“A”列数据的字典!不知道如何解决这个问题。

错误讯息: <closed file 'Table.tsv', mode 'r' at 0x7fef50ba0030>

感谢您的帮助,

4 个答案:

答案 0 :(得分:4)

在以下一行

dic1[A] = samplefile 

您正在将名为samplefile的文件对象分配给字典,并且正在使用变量&#39; A&#39;的内容。作为关键价值。 并且您的错误消息不是错误消息,它的python是文件对象的字符串表示形式。 由于您离开了with上下文,因此文件对象已关闭。

您必须实际将变量分配给字典。

dic1['a'] = A

也许您想重读有关词典如何工作的一些信息。看看这里: http://learnpythonthehardway.org/book/ex39.html

答案 1 :(得分:3)

其他人已经解释了您所看到的问题,但更好的编写代码的方法是使用csv.DictReader

import csv

with open("Table.tsv") as samplefile:
    reader = csv.DictReader(samplefile, delimiter="\t")
    for row in reader:
        print row['A']

以上假设您的csv文件的第一行包含列名。如果没有,请将列名列表传递给DictReader

reader = csv.DictReader(samplefile, ['A', 'B', 'C', 'D'], delimiter="\t")

答案 2 :(得分:1)

Python关心缩进(低估了一年!)。您需要再次缩进“for in”代码块,使其成为“内部”块的一部分。

答案 3 :(得分:1)

您没有收到错误消息。

with open("Table.tsv") as samplefile:
..
dic1[A] = samplefile # storing a specific variable (column) into a dictionary 
print (dic1[A])

您打开文件,将文件句柄放入字典中,然后将其取出并打印出来。 Python打印它,您会看到已关闭文件句柄的文本表示

相关问题