Python学习笔记(8.0)

一、文件操作

1.open()函数

open()函数用于打开一个文件,并返回一个file对象(即文件对象)。

使用该函数的语法:open(file,mode,encoding)。

参数file:表示我们要打开的文件路径。

参数mode:决定打开文件的模式,最主要的模式有:只读(r),写(w),追加(a)等。默认值为只读(r)

参数encoding:表示文件的编码方式,一般为“utf-8”。

参数mode并不是强制的,它有个默认值‘r’。也就是说,打开文件时,默认只读模式。

当mode='w',即写模式时,open()函数会打开一个文件只用于写入,如果改文件已存在则打开文件,并从开头开始编辑,即原有内容会被清空。如果该文件不存在,创建新文件。

需要记住的是,当我们要对文件进行读取时,需要使用到mode="r",即只读模式打开文件。当需要对文件进行写入时,需要使用到mode='w'或mode='a'的模式打开文件。

文件路径

文件是通过文件路径定位的,在Python中,路径可以用字符串来表示。文件路径分为绝对路径和相对路径。

绝对路径就是文件或文件夹在硬盘上的完整路径。永远是根目录开头,具体的文件或文件夹名称做结尾。

 

# Windows 系统中,C 盘根目录中有个名为 【codes】 的文件夹,该文件夹内有 【工作】 文件夹和 【main.py】 文件,【工作】 文件夹中有 csv 文件 【总年级成绩单.csv】。

# 【工作】文件夹的绝对路径
'C:/codes/工作/'
# 【main.py】文件的绝对路径
'C:/codes/main.py'
# 【总年级成绩单.csv】文件的绝对路径
'C:/codes/工作/总年级成绩单.csv'

相对路径是指相对于当前目录的位置。相对路径使用两个特殊符号:点【.】和双点【..】。点【.】表示文件或文件夹所在的当前目录,双点【..】表示当前目录的上一级目录。

 

# 【工作】 文件夹与 【main.py】 文件都在 【codes】 文件夹中,所以 【工作】 文件夹和 【main.py】 文件的相对路径就可以表示为:

# 【工作】文件夹的相对路径
'./工作/'
# 【main.py】文件的相对路径
'./main.py'
# 【总年级成绩单.csv】文件的绝对路径
'./工作/总年级成绩单.csv'

2.close()函数

close()函数常与open()函数配套使用,用于关闭打开的文件对象。

使用语法:文件对象.close()

# 设置【1班成绩单.csv】文件的路径
file_path = './工作/各班级成绩/1班成绩单.csv'

# 使用 open() 函数打开 【1班成绩单.csv】 文件
source_file = open(file_path, 'r', encoding='utf-8')

# 关闭 source_file 文件对象
source_file.close()

3.with open() as ...

with open()as...是对原有open()和close()的优化。使用with open() as...语句后,在with下面的代码块结束时,会自动执行close()关闭文件。

用法是把open()函数放在with后面,把变量名放在as后面,结束时要加冒号:,然后要把执行的文件处理语句缩进到with open() as ...下方的代码块中。

请务必记住缩进,打开文件之后的其它文件操作,都应该位于with下缩进的代码块中。

二、模块与库

1.模块/库的概念

模块本质上是一个单独的Python文件,一个写好了代码、功能齐全的Python文件就是一个模块。模块中可以包含多个变量、函数、类等。

而具有相关功能模块的集合,就形成了库,库分为标准库和第三方库。

标准库:指Python中内置的模块的集合,不需要安装就可以导入使用。

第三方库:指由第三方发布的库,需要下载安装到本地的Python中,才能够导入使用。

2.模块的使用方式

导入模块

模块的导入语法为:import+模块名。(需要留意的是,语法中import语句与模块名之间有个空格)

import os

直接导入模块内的类或函数:from 模块名 import 类/函数名 。(温馨提示:import 之后的类名或函数名,只需要类或函数的名称,不需要加上()

from os import listdir

调用模块内容

如果想要调用模块中的某一个类、函数或变量,其调用语法如下:

1)调用模块下的类:模块名.类名()

2)调用模块下的函数:模块名.函数名()

3)调用模块下的变量:模块名.变量名

import os

file_name = os.listdir('./工作/各班级成绩')
print(file_name)

 4.os模块

os模块多用于访问操作系统的功能。模块下的listdir()函数用于返回指定文件夹包含的文件或文件夹的名字的列表。

listdir函数的语法是:os.listdir(path),作用是获取某个文件夹中的所有文件、文件夹名称,需要传入指定文件夹的文件路径。

4.csv模块

csv文件

csv是一种文件格式,是“comma-separated Values(逗号分隔的值)的首字母缩写,其文件以存文本形式存储表格数据”可以通过存文本打开,也可以通过Excel软件打开。

 

 csv文件与Excel文件主要区别在于csv文件只是存文本文件,不包含文字排版格式、单元格样式等信息,所以比Excel文件占用的内存更少,读取速度也更快。

Python自带csv模块,专门用于处理csv文件的读取和写入。

DictReader()类

DictReader()类可以以字典的形式读取csv文件。以csv文件首航标签为键,以每一行的内容作为各个值的形式。

类DictReader()的实例化语法为:DictReader(f),其中参数f 为csv文件的对象。实例化DictReader()后,会得到一个DictReader对象。

 

# 导入 csv 模块
import csv

# 设置【2班成绩单.csv】文件的路径
file_path = '../工作/各班级成绩/2班成绩单.csv'

# 使用 with open() as ...,以只读模式打开 csv 文件,文件编码为 utf-8
with open(file_path, 'r', encoding='utf-8') as source_path:

    # 以字典的形式获取 csv 文件信息
    file_dict = csv.DictReader(source_path)

    # 打印标签信息
    print(file_dict.fieldnames)
    
    # 使用 for 循环遍历 DictReader 对象
    for row in file_dict:
        # 打印遍历得到字典形式的每一行数据
        print(row)

需要注意的是:DictReader 对象无法直接打印显示,需要通过 for 循环遍历每一行信息显示;DictReader 对象.fieldnames 可以获取 csv 文件的标签信息,也是 DictReader 对象的键信息。

dictWriter()类

DictWriter()支持数据以字典的形式写入csv文件。

类DictWriter()实例化语法为:DictWriter(f,fieldnames)。

参数f为csv文件的对象;

参数fieldnames的作用是定义文件的表头,其数据可以为列表形式。

# 导入 csv 模块
import csv

# 新建两个字典
dict1 = {'姓名': '王大帅', '身高': '176'}
dict2 = {'姓名': '许漂亮', '身高': '177'}

# 设置文件的表头
head = ['姓名', '身高']

# 设置总文件路径
file_path = '../工作/学生体检表.csv'

# 以自动关闭的方式打开文件
with open(file_path, 'w', encoding='utf-8') as f:
    
    # 实例化类 DictWriter(),得到 DictWriter 对象
    dict_write = csv.DictWriter(f, fieldnames=head)

    # 写入文件的表头
    dict_write.writeheader()

    # 写入文件的多行内容
    dict_write.writerows([dict1, dict2])

DictWriter()类的写入流程可以分为:

(1)定义文件表头

(2)以字典的形式定义需要写入的内容

(3)以‘w’模式打开指定路径文件,文件以.csv为后缀名;

(4)实例化DictWriter对象,传入文件表头信息参数,定义表头信息;

(5)通过DictWriter对象.writeheader()方法写入表头信息;

(6)通过DictWriter对象.writerow(dict)或DictWriter对象.writerows(list)方法写入内容。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

mez_Blog

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

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

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

打赏作者

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

抵扣说明:

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

余额充值