2020年4月30日 第七章 文件-2

第七章 文件-2

7.4 文件和目录操作

文件和目录操作包括:查看文件属性、复制和删除文件、创建和删除目录等
1.os 模块
2.os.path 模块
3.shutil 模块

1 os 模块

os模块(库):

  • Python内置的os模块提供了访问操作系统服务功能,如文件重命名,文件删除,目录创建,目录删除等
  • 使用时需先导入该模块import os
方法名 含义
os.getcwd() 显示当前的工作目录(路径)
os.chdir(newdir) 改变当前工作目录,如os.chid
os.listdir(path) 列出指定目录下所有的文件和目录
os.mkdir(path) 创建单级目录
os.makedirs(path) 创建多级目录
os.rmdir(path) 删除单级目录
os.removedirs(path) 删除多级目录
os.rename(old,new) 将文件或目录old重命名为new
os.remove(path) 删除文件

【课堂实践】准备:在D盘新建一个文件夹“python123”,在该文件夹下新建一个文本文件“a1.txt”,然后在IDLE下完成如下操作

>>> import os
>>> os.getcwd()#python安装目录不同,返回的结果可能不同
'D:\\Python35' 
>>> os.chdir("d:/python123")
>>> os.getcwd()
'd:\\python123'
>>> os.listdir("d:/python123")
['a1.txt']
>>> os.mkdir("d:/python123/abc")
>>> os.makedirs("d:/python123/a/b/c")
>>> os.removedirs("d:/python123/a/b/c")
>>> os.rename("a1.txt","b1.txt")
>>> os.remove("d:/python123/b1.txt")

2 os.path 模块

os.path模块(库):

  • Python内置的os.path模块主要用于针对路径的操作
  • 使用时需先导入该模块import os.path
方法名 含义
os.path.split(path) 分割路径与文件名,返回元组(<路径>,<文件名>)
os.path.splitext(path) 分割文件名与扩展名,返回元组(<文件名>,<扩展名>)
os.path.abspath(path) 获得文件的绝对路径
os.path.dirname(path) 去掉文件名,只返回目录路径
os.path.getsize(file) 获得指定文件的大小,返回值以字节为单位
os.path.basename(path) 去掉目录路径,只返回路径中的文件名
os.path.exists(path) 判断文件或目录是否存在

【课堂实践】准备:在D盘新建一个文件夹“python123”,在该文件夹下新建一个文本文件“a1.txt”,然后在IDLE下完成如下操作

import os.path
>>> os.path.split("d:/python123/a1.txt")
('d:/python123', 'a1.txt')
>>> os.path.splitext("d:/python123/a1.txt")
('d:/python123/a1', '.txt')
>>> os.chdir("d:/python123")
>>> os.path.abspath("a1.txt")
'd:\\python123\\a1.txt'
>>> os.path.dirname("d:/python123/a1.txt")
'd:/python123'
>>> os.path.basename("d:/python123/a1.txt")
'a1.txt'
>>> os.path.exists("d:/python123/a1.txt")
True

综合实例

【例7-3】把“d:\pyton123”路径下的所有.jpg图片文件名称加上“_Python”,如将“a1.jpg”修改文件名为“a1_Python.jpg”。(准备:在d:\python123目录下存储4张图片,图片的名字为*.jpg)

#E7-3.py
import os
imgDir="d:/python123"

for filename in os.listdir(imgDir):  #将该目录下所有文件返回一个列表,遍历该列表
  lists=filename.split('.')#将文件名分割成包含主文件名和扩展名的列表lists
  if lists[-1]=="jpg":#取扩展名,判断是否为jpg
    oldFile=imgDir+'/'+filename #原文件的绝对路径
    newFile=imgDir+'/'+lists[0]+'_Python'+'.'+fileExt  #重命名后文件的绝对路径
    os.rename(oldFile,newFile)  #重命名操作

7.5 CSV文件格式读/写操作

  • 数据包括文件存储和程序使用两个状态。
  • 存储不同维度的数据需要适合维度特点的文件存储格式,处理不同维度数据的程序需要使用相适应的数据类型或结构
  • 因此,对于数据处理,需要考虑存储格式以及表示和读写等两个问题

数据维度

  • 一组数据在被计算机处理前需要进行一定的组织,表明数据之间的基本关系和逻辑,进而形成数据的维度
  • 根据数据的关系不同,数据组织可以分为:一维数据二维数据高维数据

一维数据

  • 一维数据,由对等关系的有序或无序数据组成,采用线性方式组织,对应于数学中的数组和集合等概念
  • 例如:国际经济合作论坛20国集团(G20) 成员是对等关系,表示为一维数据,无论采用何种方式分隔和表示,一维数据都具有线性特点

中国,美国,日本,德国,法国,英国,意大利,加拿大,俄罗斯 ,欧盟,澳大利亚,南非, 阿根廷,巴西,印度尼西亚,墨西哥,沙特阿拉伯,土耳其,韩国

二维数据

  • 二维数据,也称表格数据,由关联关系数据组成,采用表格方式组织,对应于数学中的矩阵
  • 例如:国家统计局发布的近5年我国粮食产量是二维数据,摘录部分如表格如示
指标 2019年 2018年 2017年 2016年 2015年
粮食产量(万吨) 66384.00 65789.22 66160.72 66043.51 66060.27
夏收粮食产量(万吨) 14160.00 13881.02 14174.46 14050.16 14074.94
秋粮产量(万吨) 49597.00 49049.18 48999.10 48890.78 48778.09
谷物产量(万吨) 61368.00 61003.58 61520.54 61666.53 61818.41
稻谷产量(万吨) 20961.00 21212.90 21267.59 21109.42 21214.19
玉米产量(万吨) 26077.00 25717.39 25907.07 26361.31 26499.22

高维数据

  • 高维数据,由键值对类型的数据构成,采用对象组织,可以多层嵌套,属于整合度更好的数据组织方式,能表达更加灵活和复杂的数据关系
  • 高维数据在Web系统中十分常用,作为当今Internet组织内容的主要方式,高维数据衍生出HTML、XML、JSON等具体数据组织的语法结构
  • 例如,描述中国古典四大名著的JSON格式的高维数据表示,

"四大名著":[
{"书名": "红楼梦", "作者": "曹雪芹"},
{"书名": "三国演义", "作者": "罗贯中"},
{"书名": "水浒传", "作者": "施耐庵"},
{"书名": "西游记", "作者": "吴承恩"}
]

CSV格式

  • CSV是国际通用的一、二维数据存储格式,采用逗号分隔数值的存储格式,在商业上和科学上广泛应用,尤其应用在程序之间转移表格数据
  • CSV的应用有如下一些规则:
  1. 纯文本格式,通过单一编码表示字符
  2. 以行为单位,开头不留空行,行之间没有空行
  3. 每行表示一个一维数据,多行表示二维数据
  4. 以逗号(英文、半角)分隔每列数据,列数据为空也要保留逗号
  5. 对于表格数据,可以包含或不包含列名,包含时列名放置在文件第一行

数据摘录于2020年3月国家统计局发布的能源产品产量

nycpcl.csv - 记事本
指标,本月,当月增速(%),累计增速(%)
原煤(万吨),33726.00,9.60,-0.50
天然气(亿立方米),168.60,11.20,9.10
原油(万吨),1656.30,-0.10,2.40
汽油(万吨),943.00,-21.00,-16.30
发电量(亿千瓦时),5525.10,-4.60,-6.80

CSV格式

  • CSV格式的每一行是一维数据,可以使用Python中的列表类型表示,整个CSV文件是一个二维数据,由表示每一行的列表类型作为元素,组成一个二维列表

【例7-4】 导入CSV格式数据到列表

#E7-4.py
fo=open("d:/python/nycpcl.csv","r")
ls=[]
for line in fo:
  ls.append(line.split(","))
print(ls)
fo.close()

程序运行结果
[['指标', '本月', '当月增速(%)', '累计增速(%)\n'], ['原煤(万吨)', '33726.00', '9.60', '-0.50\n'], ['天然气(亿立方米)', '168.60', '11.20', '9.10\n'], ['原油(万吨)', '1656.30', '-0.10', '2.40\n'], ['汽油(万吨)', '943.00', '-21.00', '-16.30\n'], ['发电量(亿千瓦时)', '5525.10', '-4.60', '-6.80\n']]

【例7-4】 导入CSV格式数据到列表
一次读入全部数据写入

#E7-4.py
fo=open("d:/python/nycpcl.csv","r")
ls=[]
for line in fo:
  #line=line.replace("\n","")
  line=line.strip("\n")
  ls.append(line.split(","))
print(ls)
fo.close()

程序运行结果
[['指标', '本月', '当月增速(%)', '累计增速(%)'], ['原煤(万吨)', '33726.00', '9.60', '-0.50'], ['天然气(亿立方米)', '168.60', '11.20', '9.10'], ['原油(万吨)', '1656.30', '-0.10', '2.40'], ['汽油(万吨)', '943.00', '-21.00', '-16.30'], ['发电量(亿千瓦时)', '5525.10', '-4.60', '-6.80']]

【例7-5】 逐行处理CSV格式数据

#E7-5.py
fo=open("d:/python/nycpcl.csv","r")
for line in fo:
  #line=line.replace("\n","")
  line=line.strip("\n") 
  ls=line.split(",")
  lns=""
  for s in ls:
    lns+="{:<15}".format(s)
  print(lns)
fo.close()

程序运行结果

指标 本月 当月增速(%) 累计增速(%)
原煤(万吨) 33726.00 9.60 -0.50
天然气(亿立方米) 168.60 11.20 9.10
原油(万吨) 1656.30 -0.10 2.40
汽油(万吨) 943.00 -21.00 -16.30
发电量(亿千瓦时) 5525.10 -4.60 -6.80

【例7-6】 一维数据写入CSV格式文件

#E7-6.py
fo=open("d:/python/nycpcl.csv","a+")
ls=["煤气(亿立方米)","1217.30","1.60","4.00"]
fo.write(",".join(ls)+"\n")
fo.close()

程序运行结果

nycpcl.csv - 记事本
指标,本月,当月增速(%),累计增速(%)
原煤(万吨),33726.00,9.60,-0.50
天然气(亿立方米),168.60,11.20,9.10
原油(万吨),1656.30,-0.10,2.40
汽油(万吨),943.00,-21.00,-16.30
发电量(亿千瓦时),5525.10,-4.60,-6.80
煤气(亿立方米),1217.30,1.60,4.00

【例7-7】 二维数据写入CSV格式文件操作,将nycpcl.csv文件的前三行读出来写入到a1.csv文件中

#E7-7.py
fo=open("d:/python/nycpcl.csv","r")
fw=open("d:/python/a1.csv","w")
ls=[]
i=0
for line in fo:
  ls.append(line.split(","))
  i+=1
  if i==3:
    break
for row in ls:
  fw.write(",".join(row))
fo.close()
fw.close()

程序运行结果

al.csv - 记事本
指标,本月,当月增速(%),累计增速(%)
原煤(万吨),33726.00,9.60,-0.50
天然气(亿立方米),168.60,11.20,9.10

你可能感兴趣的:(2020年4月30日 第七章 文件-2)