一、OS库
1. 简介
os是与操作系统相关的标准库。如:文件,目录,执行系统命令等。
import os #导入os库
2. 目录操作
方法 | 功能 |
---|---|
os.listdir() | 返回一个列表。列表为给定目录下所有文件和子目录 |
os.remove(‘dirname’) | 返删除文件,可以删除单个文件,不能删除文件夹 |
os.mkdir() | 创建目录。以数字形式指定目录权限,默认权限为 777 |
os.makedirs() | 递归方式创建目录。并以数字形式指定目录权限,默认权限为 777 可以看作功能更强大的 mkdir,它会自动创建叶子节点目录的所有上级目录,而 mkdir 必须在上级目录已经存在情况下,才能创建叶子节点的目录。 |
os.path.basename() | 返回不包含所在目录的文件名(含扩展)。即返回最基本的文件名 |
os.rmdir() | 删除目录。目录必须存在,并且只能删除空目录。不存在或不为空,都会异常 |
os.removedirs() | 递归删除目录。目录必须存在,并且只能删除空目录。不存在或不为空,都会异常。 与 rmdir 不同的是,在删除了叶子节点目录后,会逐次删除上级目录,直到遇到不为空的目录。 |
os.listdir("D:") #返回D盘下的所有文件目录
os.mkdir("python")
os.remove("qw.vsdx")
shutil.rmtree(path[, ignore_errors[, onerror]]) #递归删除文件
3. path 路径子模块
可以通过 from os import path使用,也可以直接通过 os.path 属性的方式使用。
方法 | 功能 |
---|---|
os.path.join() | 将路径不同部分拼接成一个完整的路径 |
os.path.split() | 返回一个元组。元组第一个元素为文件所在目录,第二个元素为文件名(含扩展)。等效于 (dirname(path), basename(path)) |
os.path.splitext() | 返回一个元组。元组第一个元素为文件所在目录和文件名(不含扩展),第二个元素为扩展名(包含 .)。常用来读取或更改文件扩展名。 |
os.path.exists("dirname.扩展名’) | 检测文件或目录是否存在,存在返回 True,不存在返回 False |
os.path.isfile() | 判断某路径是否为文件,返回布尔值。也可以用来判断文件是否存在 |
os.path.isdir() | 判断某路径是否为文件夹,返回布尔值。也可以用来判断目录是否存在 |
os.path.basename() | 返回不包含所在目录的文件名(含扩展) |
os.path.dirname() | 返回文件所在目录 |
os.path.getsize() | 返回文件大小,单位字节 |
os.path.abspath(path) | 返回path在当前系统中的绝对路径 |
os.path.normpath(path) | 归一化path的表示形式(统一用\分割路径) |
os.path.relpath(path) | 返回当前程序与文件之前的相对路径 |
os.path.dirname(path) | 返回path中的目录路径 |
os.path.getatime(path) | 返回path对应文件或目录上一次访问的时间(access) ;getmtime即为上一次修改的时间(modify) |
os.path.getctime(path) | 返回path对应文件或目录创建的时间(create) |
#将路径不同部分拼接成一个完整的路径。等效于os.sep.join([path, *paths])
os.path.join("dir1", "dir2", "file.ext")
os.sep.join( )和os.path.join()的用法和区别
os.sep是为了解决不同平台上文件路径分隔符差异问题,os.sep.join( )函数传入的参数是一个列表,输出的结果是将列表中的元素用相应平台对应的路径分隔符链接起来的整体
os.sep.join([‘hello’, ‘world’]) #输出为:hello\world
os.path.join() 该函数传入的参数是多个字符串型变量,例如:
os.path.join('hello', 'world') #输出为:hello\world
os.sep.join( )和os.path.join()两个函数传入的参数类型不同,前者是列表(列表中的元素也必须是字符串型的),后者是多个字符串型变量;两个函数实现的功能基本相同。
4. 其他
方法 | 功能 |
---|---|
os.sep() | 获得当前操作系统使用的目录分隔符. |
os.getcwd() | 获得当前工作目录,即当前 Python 脚本工作的目录路径。 |
os.chdir() | 修改当前目录 |
二、csv库
1. 简介
csv库:专用于处理csv文件的库。
csv文件:由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。
2. 常用对象
import csv #首先需要导入csv库
(1)新建csv文件
path = 'test.csv'
csvf = open(path, 'a+', encoding='utf-8', newline='') #添加 newline='',否则会在两行数据之间都插入一行空白。
(2)写入数据
a. 以列表的形式写入: csv.writer
Example 1 直接写入
# 导入 csv 库
import csv
header_list = ["name", "age",]
data_list = [
["David", 20],
["Helen", 19]
]
f_out=open("testnew.csv", mode="a", encoding="utf-8-sig", newline="")
writer = csv.writer(f_out)
writer.writerow(header_list)
writer.writerows(data_list)
Example 2 定义函数写入
import csv
a=["name", "age"]
b=[
["David", 20],
["Helen", 19]
]
c=[
["Did", 20],
["Hen", 19]
]
def csvwriter_fun(header_list,data_list,path="test.csv"):
# 以写方式打开文件。注意添加 newline="",否则会在两行数据之间都插入一行空白。
# a+表述补充写入,w+覆盖写入,即可实现从第一行写入
# 如果要保存的内容有中文,而且之后需要用Excel打开文件,那么需要选用utf-8-sig编码。如果使用utf-8编码,会导致使用Excel查看文件时中文乱码。
with open(path, mode="a+", encoding="utf-8-sig", newline="") as f_out:
# 基于打开的文件,创建 csv.writer 实例
writercsv = csv.writer(f_out)
# 写入 header。
# writerow() 一次只能写入一行。
writercsv.writerow(header_list)
# 写入数据。
# writerows() 一次写入多行。
writercsv.writerows(data_list)
csvwriter_fun(a,b) #调用函数
#改自:https://blog.csdn.net/qq_45186086/article/details/125158496
b. 以字典的形式写入:csv.DictWriter
语法:
csv.DictWriter(f,fieldnames ) #其中:参数 f 是 open() 函数打开的文件对象;参数 fieldnames 用来设置文件的表头
Example 1 直接写入
注意:字典的“键”需要对应表头
import csv
csvf = open('testnew.csv', 'a+', encoding='utf-8', newline='')
header_list = ["name", "age",]
data_list = [
{"name":"AA", "age":20},
{"name":"BB", "age":20},
]
writer = csv.DictWriter(csvf, fieldnames=header_list)
#执行csv.DictWriter(f, fieldnames)后会得到一个 DictWriter 对象;
#得到的 DictWriter 对象可以调用 writeheader() 方法,将 fieldnames 写入 csv 的第一行
writer.writeheader() #写入表头
writer.writerows(data_list)
csvf.close()
c. csv.writer()方法与csv.DictWriter()方法
writer()
的功能是创建一个常规Writer的对象,但是调用writer()
的writerow/writerows方法是要传入的是列表类型数据。
DictWriter()
的功能是创建一个类似于常规Writer的对象,但是调用DictWriter()
的writerow/writerows方法是要传入的是字典类型数据。
d. 步骤总结
csv存储数据代码步骤
- 新建一个csv文件
import csv
path = 'data/test.csv'
csvf = open(path, 'a+', encoding='utf-8', newline='')
- 定义字段名,并初始化csv文件为writer
fieldnames = ['name', 'age']
writer = csv.DictWriter(csvf, fieldnames=fieldnames)
writer.writeheader()
- 将待存储数据整理为字典格式
test_data = {'name': 'David',
'age': 25}
- 用writer往csv中存储数据
writer.writerow(test_data)
- 最后关闭csv文件
csvf.close()
(3)读取数据
a. 以列表的形式读取:csv.reader()
# 导入 csv 库
import csv
def reader():
# 打开csv文件 此处的delimiter指定了分隔符,不用此参数的话,分隔符默认为逗号
with open("test.csv", mode='rt',encoding="utf-8-sig") as f_in:
reader = csv.reader(f_in,delimiter=',')
# 获取指定行的header
# header[0] = "name"
# header[1] = "age"
header = next(reader) #直接下一个操作
# 逐行获取数据,并处理
for line in reader:
print(line)
reader() //调用函数
#改自:https://blog.csdn.net/qq_45186086/article/details/125158496
直接以列表形式输出各行,不分表头和数据内容
b. 以字典的形式读取
# 导入 csv 库
import csv
with open("test.csv", mode='rt',encoding="utf-8-sig") as f_in:
# 基于打开的文件,创建csv.DictReader实例
reader = csv.DictReader(f_in)
# 逐行获取数据,并处理
for line in reader:
print(line)
结果呈字典形式,第一行为键,下面各行分别对应其值