zoukankan      html  css  js  c++  java
  • Python中csv和json文件操作

    1.csv的存储操作

    """
    csv两种写入操作
    csv就是字符分隔的纯文本,字段间的分隔符是其他字符或字符串
    csv写入之后的文件可以直接Excel打开
    """
    import csv
    
    
    def write_csv_demo():
        headers = ["username", "age", "height"]
        values = {
            ("张三", 18, 180),
            ("李四", 19, 190),
            ("王五", 20, 160)
        }
    
        # 写入编码utf-8防止乱码,newline默认
    换行,防止换行让它等于空字符串
        with open("classroom.csv", "w", encoding="utf-8", newline="") as fp:
            # 调用csv库的writer()方法并传入fp文件句柄生成<class '_csv.writer'>实例对象
            writer = csv.writer(fp)
            # 调用实例对象的方法writerow()写入一行,默认逗号分隔。传入delimiter=" "可以修改列与列之间的分隔符
            writer.writerow(headers)
            # 写入多行是在writerow的基础之上添加map()方法传入一个函数和列表循环写入
            writer.writerows(values)
    
    
    def write_csv_site():
        headers = ["username", "age", "height"]
        values = [
            {"username": "张三", "age": 18, "height": 180},
            {"username": "李四", "age": 19, "height": 190},
            {"username": "王五", "age": 20, "height": 160},
        ]
        with open("classroom1.csv", "w", encoding="utf-8", newline="") as fp:
            # DictWriter需要传入一个文件句柄和字典的key列表
            writer = csv.DictWriter(fp, headers)
            # 正式写入需要调用writeheader方法传入文件头
            writer.writeheader()
            # 写入多行文本
            writer.writerows(values)
    
    
    if __name__ == '__main__':
        write_csv_demo()
        write_csv_site()
    View Code

    2.csv的读取操作

    """读取csv文件的三种方式"""
    import csv
    # 在这里也可以使用pandas的read_csv()方法读取csv中的数据
    import pandas
    
    
    def read_csv_demo():
        # 优势:操作简单。劣势:数据排序混乱时取值可能报错
        with open("classroom.csv", "r", encoding="utf-8") as fp:
            # reader是一个迭代器
            reader = csv.reader(fp)
            # 执行一次next,指针跳过一位,可以不获取标题
            next(reader)
            for x in reader:
                print(x)  # 可用列表下标x[1]获取具体对象
    
    
    def read_csv_site():
        # 优势:即便数据混乱也可以通过key取值。劣势:稍复杂一点
        with open("classroom1.csv", "r", encoding="utf-8") as fp:
            # 使用DictReader创建的reader对象不会包含标签这一行的数据
            reader = csv.DictReader(fp)
            # 遍历reader迭代器返回的是一个有序字典
            for x in reader:
                value = {"name": x["username"], "age": x["age"]}
                print(value)
    
    
    def pandas_csv_read():
        # 常用在数据分析,方便读取
        content = pandas.read_csv("classroom.csv")
        print("=" * 50)
        print(content)
    
    
    if __name__ == '__main__':
        read_csv_demo()
        read_csv_site()
        pandas_csv_read()
    View Code

    3.json的存储和读取操作

    """json文件存储
    JavaScript语言中,一切都是对象。因此,任何支持的类型都可以通过JSON来表示,例如字
    符串、数字、对象、数组等,但是对象和数组是比较特殊且常用的两种类型。
    json构造简洁但是结构化程度非常高,是一种轻量级的数据交换格式。
    
    对象:它在JavaScript中是使用花括号{}包裹起来的内容,数据结构为{keyl:valuel, key2:
    value2 }的键值对结构。     和python中的字典相似
    数组:数组在 JavaScript 是方括号[]包裹起来的内容,数据结构为["python", "javascript" ,
    "vb"]的索引结构。         和python中的列表相似
    """
    
    # JSON的表现形式。
    [{"name": "Jim", "age": "24"}, {"name": "Anla", "age": "20"}]
    
    
    """采用python中的json库来一波操作"""
    import json
    
    
    # json字符串的表示需要使用双引号。单引号会报错
    text = """[{"name": "Jim", "age": "24"}, {"name": "Anla", "age": "20"}]"""
    # 类型是str
    print(type(text))
    # 调用loads()方法读取字符串
    content = json.loads(text)
    # 转换成列表
    print(content)
    # 列表索引取值之后字典键名取值。不建议使用此方法,字典无取值对象会报错
    print(content[0]["name"])
    # 列表索引取值之后字典键名取值。建议使用此方法,字典无取值对象会返回默认值
    print(content[1].get("name", None))
    # 类型是list
    print(type(content))
    
    # 数据写入文件,utf-8编码支持中文显示
    with open("data.json", "w", encoding="utf-8") as f:
        # dumps()方法将json对象转化为字符串,f文件句柄调用write()方法把字符串写入文件
        f.write(json.dumps(text, indent=2))     # indent可以让写入的json字符串自带缩进
    
    # 文件读取数据,utf-8编码支持中文显示
    with open("data.json", "r", encoding="utf-8") as f:
        # 用变量接收以"r"形式读取的文件内容
        content = f.read()
        # 通过loads()方法解析json字符串
        text = json.loads(content)
        print(text)
    View Code
  • 相关阅读:
    1082 射击比赛 (20 分)
    1091 N-自守数 (15 分)
    1064 朋友数 (20 分)
    1031 查验身份证 (15 分)
    1028 人口普查 (20 分)
    1059 C语言竞赛 (20 分)
    1083 是否存在相等的差 (20 分)
    1077 互评成绩计算 (20 分)
    792. 高精度减法
    791. 高精度加法
  • 原文地址:https://www.cnblogs.com/Guishuzhe/p/9842356.html
Copyright © 2011-2022 走看看