day18csv、excel(.xlsx)

csv(csv模块)、excel(.xlsx)(openpyxl)

csv文件读操作

  1. 什么是csv文件

    csv文件叫逗号分隔值文件 - 每一行内容是通过逗号来区分出不同的列
    csv文件可以直接通过excel打开,以行列的形式保存和显示数据,但是相对excel文件,它只能存储数据,不能保存公式和函数。

  2. csv读操作

    import csv
    
    # 1)创建打开csv文件
    """
    文件对象.open()
    文件对象.close()
    
    with open() as 文件对象:
        操作文件
    """
    f = open('files/电影.csv', 'r', encoding='utf-8')
    # 2)创建reader获取文件内容
    """
    csv.reader(文件对象) - 获取文件内容返回一个迭代器,并且以列表为单位返回每一行内容
    csv.DicReader(文件对象) - 获取文件内容返回一个迭代器,并且以字典为单位返回第2行开始的每一行内容(字典的键是第一行内容)
    """
    
    # result = csv.reader(f)
    # print(list(result))
    
    # result2 = csv.DictReader(f)
    # print(list(result2))
    # f.close()
    """from re import *
    
    # 获取
    with open('files/lagou.csv', 'r', encoding='utf-8') as f:
        reader = csv.DictReader(f)
        # 处理数据
        citys = {}
        for job in reader:
            c = job['city']
            m = job['salary']
            result = findall(r'(\d+)k-(\d+)k', m)
            if not result:
                continue
            start, end = result[0]
            moneys = citys.get(c, [])
            moneys.append((int(start) + int(end)) / 2)
            citys[c] = moneys
        # round(数字, 小数位数) - 让数字保留指定位数的小数
        for key in citys:
            print(key, round(sum(citys[key]) / len(citys[key]), 2))"""
    

csv文件写操作

  1. csv文件写操作

    # 1)打开文件
    f = open('files/data.csv', 'a', encoding='utf-8', newline='')
    # 2)创建writer对象
    """
    a.csv.writer(文件对象) - 创建writer对象,这个对象在写入数据的时候一行对应一个列表
    
    b.csv.DictWriter(文件对象, 键列表) - 创建writer对象,以字典为单位写入数据
    """
    # a.以列表为单位写入一行内容
    writer = csv.writer(f)
    # 一次写入一行内容
    writer.writerow(['姓名', '出生日期', '性别', '电话'])
    writer.writerow(['小明', '1999-9-9', '男', '110'])
    # 一次写入多行
    writer.writerows([
        ['小花', '2001-9-9', '女', '120'],
        ['张三', '2000-9-9', '男', '119']
    ])
    # b.以字典为单位写入一行内容
    writer = csv.DictWriter(f, ['姓名', '出生日期', '性别', '电话'])
    # 写入文件头(将字典的键写入到文件开头)
    writer.writeheader()
    # 一次写入一行内容
    writer.writerow({'姓名': 'xiaoming', '出生日期': '1999-9-9', '性别': '男', '电话': '110'})
    writer.writerows([
        {'姓名': 'xiaohua', '出生日期': '1999-9-9', '性别': '男', '电话': '110'},
        {'姓名': 'zhangsan', '出生日期': '1999-9-9', '性别': '男', '电话': '110'}
    ])
    

虚拟环境

  1. 系统环境 - 安装python就可以为计算机提供一个Python的系统环境
  2. 虚拟环境 - 程序员根据需要自己创建的额Python环境
    能够创建虚拟环境的前提:存在系统环境
  3. 环境的作用:
    1)提供Python解释器
    2)提供第三方库
    虚拟环境的存在可以让第三方库根据类别或者项目分开管理。
  4. 使用虚拟环境的建议:
    1)工作的时候:一个项目一个虚拟环境,并且将虚拟环境直接放在项目中
    2)学习的时候:一类项目一个虚拟环境,不同类别的虚拟环境全部放在一个地方
  5. 怎么创建虚拟环境
    1)使用Pycharm创建
    打开设置页面 ->
    2)使用指令创建

excel文件读操作

  1. 认识excel文件

    工作簿:一个excel文件就是一个工作簿
    工作表:一个工作簿中可以有多个工作表(至少一个)
    单元格:单元格是excel文件保存数据的基本单位
    行号和列号:可以确定单元格位置

  2. 获取excel文件内容

    # 1)打开excel文件创建工作簿对象
    """
    openpyxl.open('excel文件路径')
    openpyxl.load_workbook('excel文件路径')
    """
    # workbook = openpyxl.open('files/三国人物数据.xlsx')
    workbook = openpyxl.load_workbook('files/三国人物数据.xlsx')
    print(workbook)
    # 获取工作簿中所有的工作表的表名
    result = workbook.sheetnames
    print(result)  # ['全部人物数据', '三个国家的武力', '三个国家武将的武力', '三国武将数据', '三国文官数据']
    # 2)获取工作表
    """
    工作簿对象.active - 获取活跃表(选中的表)
    工作簿对象[工作表名称] - 获取指定名字对应的工作表
    """
    sheet1 = workbook.active
    print(sheet1)
    sheet2 = workbook['三国武将数据']
    print(sheet2)
    # 3)获取单元格
    """
    工作表对象.cell(行号, 列号)
    """
    cell1 = sheet2.cell(8, 1)
    cell2 = sheet2.cell(12, 1)
    print(cell1, cell2)
    # 4)获取单元格内容
    # 单元格对象.value
    print(cell1.value)
    print(cell2.value)
    # 5)获取最大行号和最大列号(保存了数据的有效行和有效列)
    # 工作表对象.max_row
    # 工作表对象.max_column
    print(sheet1.max_row)
    print(sheet1.max_column)
    
    # 获取第一列所有数据
    list1 = []
    for i in range(1, sheet1.max_row + 1):
        cell = sheet2.cell(i, 1)
        list1.append(cell.value)
    print(list1)
    
    # 获取第一列到第三列
    for col in range(1, 4):
        list1 = []
        for row in range(1, sheet2.max_row + 1):
            cell = sheet2.cell(row, col)
            list1.append(cell.value)
        print(list1)
    

excel文件写操作

注意:不管是以什么样的方式对excel文件进行写操作,操作完成后必须保存

  1. 新建工作簿

    # 1)新建工作簿对象
    # workbook = openpyxl.Workbook()
    # 2)保存
    # 工作簿对象.save()
    # workbook.save('files/student.xlsx')
    # 实际中新建工作簿的时候需要先判断工作簿对应的文件是否存在,存在就不需要新建,不存在才新建
    # 方法一:
    try:
        workbook = openpyxl.open('files/student2.xlsx')
    except FileNotFoundError:
        workbook = openpyxl.Workbook()
        workbook.save('files/student2.xlsx')
    # 方法二:
    """import os
    # os.path.exists(文件路径) - 判断指定文件是否存在,存在返回True,不存在返回False
    if os.path.exists('files/student2.xlsx'):
        workbook = openpyxl.open('files/student2.xlsx')
    else:
        workbook = openpyxl.Workbook()
        workbook.save('files/student2.xlsx')"""
    
  2. 工作表的写操作

    # 1)新建工作表
    # 工作簿对象.create_sheet()
    # 工作簿对象.create_sheet(表名)
    # 工作簿对象.create_sheet(表名, 下标)
    # workbook.create_sheet('java', 1)
    # workbook.save('files/student2.xlsx')
    
    # 实际中的新建表:没有的时候才新建,有的时候直接打开
    if '憨憨' in workbook.sheetnames:
        sheet = workbook['憨憨']
    else:
        sheet = workbook.create_sheet('憨憨')
        workbook.save('files/student2.xlsx')
    
    # 2)删除工作表
    # 工作簿对象.remove(工作表对象)
    # workbook.remove(workbook['Sheet'])
    # workbook.save('files/student2.xlsx')
    
    # 实际中删除表:存在的时候才能删
    if '憨憨' in workbook.sheetnames:
        workbook.remove(workbook['憨憨'])
    workbook.save('files/student2.xlsx')
    
  3. 单元格的写操作

    # 单元格对象.value = 数据
    Python_sheet = workbook['Python']
    Python_sheet.cell(1, 3).value = '电话'
    Python_sheet.cell(2, 1).value = None
    Python_sheet.cell(4, 2).value = '5'
    workbook.save('files/student2.xlsx')
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用以下代码来实现你的需求: ```python import os import pandas as pd # 1. 在三省站点.xlsx文件中,遍历福建省所有的'区站号' station_file = '三省站点.xlsx' province = '福建省' df_station = pd.read_excel(station_file) fujian_station_ids = df_station.loc[df_station['省份'] == province, '区站号'].tolist() # 2. 在MON文件夹下遍历出所有福建省文件 mon_folder = 'MON' fujian_files = [] for file in os.listdir(mon_folder): if file.endswith('.txt'): file_path = os.path.join(mon_folder, file) for station_id in fujian_station_ids: if station_id in file: fujian_files.append(file_path) break # 3. 将福建省所有txt文件转为excel文件,并插入表头'Year' 'Mon' 'Day' 'PRE' header = ['Year', 'Mon', 'Day', 'PRE'] output_folder = 'output' for file_path in fujian_files: df = pd.read_csv(file_path, sep='\s+', header=None) df.columns = header output_file = os.path.splitext(file_path)[0] + '.xlsx' df.to_excel(os.path.join(output_folder, output_file), index=False) ``` 上述代码首先从 `三省站点.xlsx` 文件中读取所有站点信息,并筛选出福建省的站点编号。然后,在 `MON` 文件夹下遍历所有的 `.txt` 文件,找到文件名中包含福建省站点编号的文件。接下来,读取每个文件的内容,将其转换为 `DataFrame` 对象,并插入表头。最后,将处理后的数据保存为 `.xlsx` 格式的文件,并存放在 `output` 文件夹中。 请确保在运行代码之前,将 `三省站点.xlsx` 文件和 `.txt` 文件放在合适的位置,并修改代码中的文件路径和文件夹路径为正确的路径。同时,确保已安装 `pandas` 库来处理 Excel 文件。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值