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

2020-04-30  本文已影响0人  anivad

第七章 文件-2

7.4 文件和目录操作

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

1 os 模块

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模块(库):

方法名 含义
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文件格式读/写操作

数据维度

一维数据

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

二维数据

指标 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

高维数据

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

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格式

【例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

上一篇 下一篇

猜你喜欢

热点阅读