以下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>
感谢您的帮助,
答案 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打印它,您会看到已关闭文件句柄的文本表示。