数据处理——玩转文件与字典:Python的“数据管家”手册 📊

212次阅读

数据处理(第一部分):文本文件——数据的“电子笔记本”📝

关键字:文本文件读写、创建文件、追加内容、修改文件

内容详解:
文本文件是存数据的“基础容器”,Python 操作它超简单:

  • 📖 读取文本文件 :用open(路径, "r") 打开,read()读全部内容,readlines()按行读:
    # 读取整个文件
    with open("test.txt", "r", encoding="utf-8") as f:
        content = f.read()
    print("文件内容:", content)
    
    # 按行读取
    with open("test.txt", "r", encoding="utf-8") as f:
        lines = f.readlines()
    print("每行内容:", lines)  # 列表,每个元素是一行
  • ✍️ 创建文本文件 :用"w" 模式(覆盖旧文件):
    with open("new_file.txt", "w", encoding="utf-8") as f:
        f.write("这是新文件的第一行 \n")
        f.write("这是第二行")
  • 追加内容到文件 :用"a" 模式(在文件末尾加内容):
    with open("new_file.txt", "a", encoding="utf-8") as f:
        f.write("\n 这是追加的第三行")
  • ✏️ 修改文件内容:文本文件不能直接改某一行,要“读→改→写”:
    # 步骤 1:读文件内容
    with open("test.txt", "r", encoding="utf-8") as f:
        lines = f.readlines()
    # 步骤 2:修改第二行
    lines[1] = "修改后的第二行 \n"
    # 步骤 3:写回文件
    with open("test.txt", "w", encoding="utf-8") as f:
        f.writelines(lines)

类比:文本文件像“纸质笔记本”——读是“翻看笔记”,写是“新写一页”,追加是“在最后补写”,修改是“撕下来重写”~

集合:自动去重的“数据筛子”🔍

关键字:集合、去重、集合运算

内容详解:
集合是 {元素 1, 元素 2} 格式,特点是“无序、无重复”——像个“自动筛子”,放进去的重复数据会被过滤:

# 创建集合:自动去重
nums = {1,2,2,3,4,4,4}
print(nums)  # {1,2,3,4}(重复的 2、4 没了)# 集合推导:快速生成集合(类似列表推导)even_nums = {x for x in range(10) if x % 2 == 0}
print(even_nums)  # {0,2,4,6,8}

集合还支持 集合运算(交集、并集、差集)——比如找两个列表的共同元素:

list1 = [1,2,3,4]
list2 = [3,4,5,6]
set1 = set(list1)
set2 = set(list2)
# 交集:共同元素
print(set1 & set2)  # {3,4}
# 并集:所有元素(去重)print(set1 | set2)  # {1,2,3,4,5,6}
# 差集:set1 有但 set2 没有的元素
print(set1 - set2)  # {1,2}

这在“去重”“数据对比”场景超实用!

数据处理(第二部分):CSV 文件——Excel 表格的“平替”📈

关键字:CSV 文件、csv 模块、表格数据处理

内容详解:
CSV 是“逗号分隔的文本文件”,像简化版 Excel 表格——Python 用 csv 模块处理它:

  • 📥 读取 CSV 文件:用csv.reader(按行读)或csv.DictReader(按列名读):
    import csv
    # 按列名读(CSV 第一行是列名)with open("data.csv", "r", encoding="utf-8") as f:
        reader = csv.DictReader(f)
        for row in reader:
            # 按列名取数据
            print(f"姓名:{row['name']},年龄:{row['age']}")
  • 📤 写入 CSV 文件 :用csv.writercsv.DictWriter
    data = [{"name": "张三", "age": 18},
        {"name": "李四", "age": 19}
    ]
    with open("new_data.csv", "w", encoding="utf-8", newline="") as f:
        # 指定列名
        writer = csv.DictWriter(f, fieldnames=["name", "age"])
        writer.writeheader()  # 写列名行
        writer.writerows(data)  # 写数据行
  • 📊 分析 CSV 数据:结合列表推导 / 循环统计数据(比如算平均年龄):
    ages = []
    with open("data.csv", "r", encoding="utf-8") as f:
        reader = csv.DictReader(f)
        for row in reader:
            ages.append(int(row["age"]))
    avg_age = sum(ages) / len(ages)
    print("平均年龄:", avg_age)

注意:CSV 和 Excel 可以互相转换——Excel 能打开 CSV,Python 处理 CSV 比直接处理 Excel 更简单!

字典:带标签的“数据收纳盒”📛

关键字:字典、dict 函数、字典推导、嵌套字典

内容详解:
字典是 {键: 值} 格式,像“带标签的抽屉”——用“键”(标签)快速找“值”(内容):

  • 🔨 用 dict 函数创建字典
    # 用键值对参数创建
    person = dict(name="张三", age=18)
    # 用列表 + 元组创建
    person2 = dict([("name", "李四"), ("age", 19)])
    print(person)  # {'name': '张三', 'age': 18}
  • 📊 字典作频率表:统计元素出现次数(比如统计单词出现次数):
    words = ["apple", "banana", "apple", "orange", "apple"]
    freq = {}
    for word in words:
        if word in freq:
            freq[word] += 1
        else:
            freq[word] = 1
    print(freq)  # {'apple':3, 'banana':1, 'orange':1}
  • 🗂️ 嵌套字典:值可以是字典,存更复杂的结构(比如用户信息 + 爱好):
    user = {
        "name": "张三",
        "info": {
            "age": 18,
            "city": "北京"
        },
        "hobbies": ["篮球", "游戏"]
    }
    # 取嵌套字典的值
    print(user["info"]["city"])  # 北京
  • 字典推导 :一行生成字典(比如把列表转成{元素: 长度} 的字典):
    words = ["apple", "banana", "orange"]
    word_len = {word: len(word) for word in words}
    print(word_len)  # {'apple':5, 'banana':6, 'orange':6}

字典是 Python 处理“结构化数据”的核心工具——比列表更灵活,比表格更轻便!

字典进阶:存储与复杂结构 🚀

关键字:二进制存储字典、元组作键、有序字典

内容详解:
字典还有这些实用技巧:

  • 💾 在二进制文件中存储字典 :用pickle 模块把字典存成二进制文件(能存任意 Python 对象):
    import pickle
    user = {"name": "张三", "age": 18}
    # 存字典到二进制文件
    with open("user.pkl", "wb") as f:
        pickle.dump(user, f)
    # 从二进制文件读字典
    with open("user.pkl", "rb") as f:
        loaded_user = pickle.load(f)
    print(loaded_user)  # {'name': '张三', 'age': 18}
  • 🔑 用元组作字典的键:元组是“不可变序列”,可以当字典的键(列表不行)——比如存坐标对应的数值:
    # 键是 (x,y) 坐标,值是对应的温度
    temp_map = {(0,0): 25,
        (0,1): 26,
        (1,0): 24
    }
    print(temp_map[(0,0)])  # 25
  • 🔢 有序字典:Python 3.7+ 的普通字典会保留插入顺序,也可以用collections.OrderedDict(更灵活的有序控制)。
正文完
 0