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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352