• 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
  • 相关阅读:
    算法学习之基础(背包 列队 栈) 习题1.3.9 补全括号
    LVS负载均衡DR模式部署
    SQL更改表架构
    BCP导入导出MsSql
    E. Holes(分块)
    hdu6230 Palindrome(manacher+树状数组)
    Suffix(hash+lcp+二分)
    k近邻法( k-nearnest neighbor)
    《机器学习》第三章——LDA
    《机器学习》第三章——对率回归
  • 原文地址:https://www.cnblogs.com/Guishuzhe/p/9842356.html
走看看 - 开发者的网上家园