Python实现对csv文件的字典读写(pandas、csv和直接文件读写3种方法)

1、CSV文件

在这里插入图片描述
在这里插入图片描述

2、代码实现

2.1 pandas和csv方法读写

import pandas as pd
import csv
import os.path

# 代码背景:word_list 内元素是key,species_code_list 内元素是value,需要保存csv格式文件
word_list = pd.Series(
    ['main', 'int', 'char', 'if', 'else', 'for', 'while', 'return', 'void', 'STRING', 'ID', 'INT', '=', '+',
     '-', '*', '/', '(', ')', '[', ']', '{', '}', ',', ':', ';', '>', '<', '>=', '<=', '==', '!='])
species_code_list = pd.Series(
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 50, 10, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
     36, 37, 38, 29, 40])
system_table = dict(zip(word_list, species_code_list))
labels = ['单词符号', '种别码']


def writeToCSVBYPandas(fileName) -> '保存字典类型到csv格式文件':
    df = pd.concat([word_list, species_code_list], axis=1)
    # 或    df = pd.DataFrame(list(system_table.items()))
    # DataFrame存储为csv格式文件,index表示是否显示行名,默认是
    df.to_csv(fileName, header=labels, sep=',', index=False, encoding="utf_8_sig")


def readFromCSVByPandas(fileName) -> '返回字典类型':
    df = pd.read_csv(fileName, sep=',', encoding="utf_8_sig")
    dict_tmp = dict(zip(df.values[:, 0], df.values[:, 1]))
    for item in dict_tmp.items():
        print(item)
    return dict_tmp


def writeToCSVByCsv(fileName) -> '保存字典类型到csv格式文件':
    df = pd.concat([word_list, species_code_list], axis=1)
    out = open(fileName, 'w', newline='', encoding="utf_8_sig")
    # 设定写入模式
    writer = csv.DictWriter(out, fieldnames=tuple(labels))
    writer.writeheader()
    for row in range(df.shape[0]):
        dict_tmp = {labels[0]: df.values[row, 0], labels[1]: df.values[row, 1]}
        writer.writerow(dict_tmp)
    out.close()


def readFromCSVByCsv(fileName) -> '返回字典类型':
    dict1 = {}
    if not os.path.isfile(fileName):
        print("File does not exist!")
        return dict1
    try:
        file = open(fileName, encoding="utf_8_sig")
        reader = csv.DictReader(file, fieldnames=tuple(labels))
        i = 1
        for dict_tmp in reader:
            if i == 1:  # 除去顶部
                i = 0
                continue
            list_tmp = list(dict_tmp.values())
            dict1[list_tmp[0]] = list_tmp[1]
        file.close()
        for item in dict1.items():
            print(item)
    except Exception as e:
        print(str(e))
    finally:
        return dict1


if __name__ == '__main__':
    fileName = r'./2.csv'
    readFromCSVByPandas(fileName)
    readFromCSVByCsv(fileName)

2、直接读写

import pandas as pd

# 代码背景:word_list 内元素是key,species_code_list 内元素是value,需要保存csv格式文件
word_list = pd.Series(
    ['main', 'int', 'char', 'if', 'else', 'for', 'while', 'return', 'void', 'STRING', 'ID', 'INT', '=', '+',
     '-', '*', '/', '(', ')', '[', ']', '{', '}', ',', ':', ';', '>', '<', '>=', '<=', '==', '!='])
species_code_list = pd.Series(
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 50, 10, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
     36, 37, 38, 29, 40])
system_table = dict(zip(word_list, species_code_list))


def readFromCsv(fileName):
    fo = open(fileName)
    ls = []
    for line in fo:
        line = line.replace('\n', '')
        ls.append(line.split(','))
    fo.close()
    return ls


def writeToCsv(fileName, lst, fieldnames=None):
    f = open(fileName, 'w')
    if fieldnames is not None:
        item = [str(i) for i in fieldnames]
        f.write(','.join(item)+"\n")
    for item in lst.copy():
        item = [str(i) for i in item]
        f.write(','.join(item)+"\n")
    f.close()


def main():
    fileName = r'./2.csv'
    lst = [list(item) for item in system_table.items()]
    labels = ['单词符号', '种别码']
    writeToCsv(fileName, lst, labels)
    ls = readFromCsv(fileName)
    for item in ls:
        print(item)


if __name__ == '__main__':
    main()

在这里插入图片描述

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

广大菜鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值