0

我有一个 csv 文件。每列代表一个参数,包含几个重复数百次的值(例如 1、2、3、5)。我想编写一个 python 程序来读取每一列并将其内容存储在字典 {column_header: list_numbers} 中(不重复数字)。

我尝试修改python 文档中给出的示例

def getlist(file):
    content = dict()
    with open(file, newline = '') as inp:
        my_reader = reader(inp, delimiter = ' ')
        for col in zip(*my_reader):
            l = []
            for k in col:
                if k not in l:
                    l.append(k)
                print(k)    # for debugging purposes
            content[col[0]] = l

我期待通过打印 k 来查看列的每个元素。相反,我一次得到几列。

关于什么是错的任何想法?

4

2 回答 2

2

看起来你快到了。我会使用 aset来检测重复的数字(更有效):

def getlist(file):
    content = {}
    with open(file, newline = '') as inp:
        my_reader = reader(inp, delimiter = ' ')
        for col in zip(*my_reader):
            content[col[0]] = l = []
            seen = set()
            for k in col[1:]:
                if k not in seen:
                    l.append(k)
                    seen.add(k)
    return content

确保你的分隔符正确;如果上述方法对您不起作用,那么print()可能会向您显示整,其中分隔符仍在其中,作为字符串。

假设您的文件,用作分隔符,输出将类似于:

{'a,b,c,d': ['0,1,2,3', '1,2,3,4']}

虽然配置正确的分隔符会给你:

{'d': ['3', '4'], 'c': ['2', '3'], 'b': ['1', '2'], 'a': ['0', '1']}
于 2013-07-19T10:41:09.997 回答
1

以下 python 脚本对您有用吗?

import csv
test_file = 'test.csv'
csv_file = csv.DictReader(open(test_file, 'rb'), delimiter=',')

for line in csv_file:
    print line['x']
于 2013-07-19T10:35:44.063 回答