繁体   English   中英

Python 3,将csv文件转换为字典

[英]Python 3, Turning csv file into a dictionary

文件是这样的:

6, 'bird', 'flies', False

它需要按如下顺序排序:

{'bird': (6,'flies', False)}

这是我到目前为止,但没有正确格式化。

{"'bird'": '1'}

我目前的代码:

def read_info_file(filename):

    d = {}
    count = 0

    file = open(filename, "r")
    lines = file.readlines()

    for line in lines:
        split = tuple(line.split(","))

        if count > 0:
            d[split[1]] = split[0]
        count += 1

    return d

我也不能在这个问题中导入任何模块。

用Python解析csv文件通常比它的价值更多。 这是一种解析单个行,使用生成器,同时仍使用csv模块的简单方法:

码:

import csv

def parse_my_csv(csv_file):
    for line in csv_file.readlines():
        # replacing comma/space with comma
        yield line.replace(", ", ",")

with open('myfile.csv', 'rU') as csvfile:
    csv_read = csv.reader(parse_my_csv(csvfile), quotechar="'")
    for row in csv_read:
        d = {row[1]: (int(row[0]), row[2], bool(row[3]))}
        print(d)

结果:

{'bird': (6, 'flies', True)}

下面根据您的格式要求格式化csv。

码:

导入csv

来自pprint import pprint

def过滤器(str):

str = str.strip().strip("'")
return str

def read_info_file(filepath):

try:

    res = {}

    csvfile = open(filepath,'r')
    csv_reader = csv.reader(csvfile)

    for row in csv_reader:
        res[filter(row[1])] = (int(row[0]),filter(row[2]),bool(row[3]))

except Exception as e:
    print("Exception occurred: " + str(e))
finally:
    csvfile.close()
return res

res = read_info_file('file.csv')pprint(res)

输出:

{'动物':(7,'苍蝇',真),'鸟':(6,'苍蝇',真),'昆虫':( 8,'苍蝇',真)}

要在没有任何导入模块的情况下执行此操作,您可以使用以下理解:

码:

def read_info_file(filename):
    with open(filename, 'rU') as f:
        return {row[1]: (int(row[0]), row[2], bool(row[3]))
                for row in [
                    [c.strip().strip("'") for c in line.split(',')]
                    for line in f.readlines()
                ]}

测试:

print(read_info_file('myfile.csv'))

结果:

{'bird': (6, 'flies', True)}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM