Python 文件和目录操作

Menu

Pycharm 和 Jupyter notebook

列出指定目录下的所有文件

创建文件夹和文件移动

按照规则修改指定指定文件夹下文件的名称

读写文本文件

读写Excel文件

Pycharm 和 Jupyter notebook

Pycharm

编写python代码

自动缩进:pyhton使用缩进控制代码的所属关系,例如

#right
def fun(a,b):
c=a+b
return c
#wrong
def fun(a,b):
c=a+b
return c
#wrong
def fun(a,b):
c =a+b
return c

pycharm会帮助你自动在行首添加缩进

错误检测:一些明显错误的代码能够帮你用红色的下划线标识出来

关键词着色: 自动给关键词、变量名、普通代码等使用不同的颜色,方便代码阅读和理解

代码智能提示:变量名和关键词的自动补全

执行python代码

执行当前代码文件,并将对应的控制台(cmd)输出展示出来

调试python代码等其他高级功能

Jupyter notebook

一个交互式的笔记本,使用方式类似于matlab的交互式窗口,支持多种语言(包括python),可以运行单条命令并查看对应的结果,可以记录笔记。

安装

安装python:https://www.python.org/downloads/release/python-362/ 在此最下方选择合适的版本(windows x86-64 executable installer),并双击安装

# 打开命令行执行下面命令

1. curl -O https://raw.github.com/pypa/pip/master/contrib/get-pip.py

2. python get-pip.py

安装jupyter

# 命令行执行

pip3 install jupyter

启动jupyter

1. 在命令行执行 jupyter notebook

2. 用浏览器打开 http://127.0.0.1:8888

列出指定目录下的所有文件

方法1 使用os.listdir()

# 列出目录 /Users/liangjz/abc/ 下面的所有文件和目录
import os
os.listdir('/Users/liangjz/abc/')
# 列出当前目录下所有的文件和目录
import os
os.listdir()
# 列出指定目录下的所有文件 (包含子文件的子文件)
# 定义个函数,来列出目录下所有文件的路径
def list_son_dir(dir_path):
#获取某个目录下是所有文件名
file_names = os.listdir(dir_path)
# 遍历每个文件名
for file_name in file_names:
# 拼接出这个文件的完整路径
file_path = os.path.join(dir_path,file_name)
# 把路径打印出来
print(file_path)
# 判断这个路径是不是一个文件夹
if os.path.isdir(file_path):
# 如果是文件夹
list_son_dir(file_path)
else:
#如果不是文件夹(是一个文件),什么都不做
pass
# 调用这个函数
list_son_dir('.')

方法2 使用glob包

glob是一个简单容易上手的文件匹配包,支持使用简单的通配符进行配匹配,包括: * ? []

安装 pip3 install glob

通配符介绍

(匹配文件名中的0个或任意多个字符)

?(匹配文件名中的单个字符)

[] (使用字符区间([a-z]),可以匹配多个字符中的一个字符)

代码示例

# 引入包名
import glob
# 匹配多个路径下的特定后缀的文件名
print glob.glob('E:\*\*.doc')
print glob.glob('.\*.py')
# iglob返回的是一个可迭代的对象,必须要使用循环才能依次取出其中的文件名列表
f = glob.iglob('.\*.py')
for py in f:
print py
import glob
# 通配符?的使用
for name in glob.glob('tmp/chec?_traffic.sh'):
print name
import glob
# 字符区间的使用
for name in glob.glob('tmp/one/[a-z]*'):
print name

文件夹创建和文件移动

创建文件夹

python 创建文件包含两种情况 1.创建单层目录 2.创建多层目录

具体来讲,创建单层目录一次只能创建一级目录,创建多层目录则可以一次创建多级不存在的目录

代码示例

# 创建单层目录,如果上级目录不存在则会报错
import os
os.mkdir('f:/a/b')
# 创建单层目录,如果上级目录不存在,则会尝试创建路径中缺失的所有目录,不会报错
import os
os.mkdirs('f:/a/b/c/d')

删除目录和文件

删除文件

# os.remove 只能删除文件,不能删除文件夹(会报错),如果被删除的文件正在使用也会报出异常,所以使用前确认被删除的文件没有被代码或者程序打开
import os
os.remove('f:/a/b/c.txt')

删除文件夹

# 删除目录 path,要求path必须是个空目录
os.rmdir(path)
# 递归地删除目录。类似于rmdir(), 如果子目录被成功删除, removedirs() 将会删除父目录;但子目录没有成功删除,将抛出错误。
os.removedirs(path)

移动文件(复制,移动)

复制

安装shutil包:pip3 install shutil

复制文件

import shutil
# oldfile和newfile都只能是文件
shutil.copyfile("oldfile","newfile")
# oldfile只能是文件夹,newfile可以是文件,也可以是目标目录
shutil.copy("oldfile","newfile")

复制目录

import shutil
# olddir和newdir都只能是目录,且newdir必须不存在
shutil.copytree("olddir","newdir")
重命名文件(或目录)
import os
# 文件或目录都是使用这条命令
os.rename("oldname","newname")

或者

import shutil
#移动文件(目录)
shutil.move("oldpos","newpos")

练习按照规则修改指定文件夹的文件名称

读写文本文件

读写文件的操作基本都可以分为三部分:

打开文件

2.进行操作(读取或写入).

3.关闭文件

读取文件文件

# step1 打开文件
# 'f:\a\b\c.txt' 待读取的文件路径
# ‘rt’ 文件的打开模式 r -> read t-> text ,w -> write a-> append b-> binary
# encoding='utf-8' 文件编码, 这个参数一般不填, 常用的参数编码有 utf-8 和 gbk
a_file = open('f:\a\b\c.txt','rt',encodeing='utf-8')
# step2 读取文件
# 从文本中新读取一行内容
line = a_file.read_line()
print(line)
# 遍历one_file中的剩余所有行内容
for line in a_file:
# 输出到屏幕
print(line)
# step3 关闭文件
a_file.close()

将内容写入文本文件

# step1 打开文件
# 写入模式,如果文件不存在会创建,如果已有内容会清空
a_file = open('f:\a\b\c.txt','w')
# 追加模式,打开已有的文件,并在尾部追加内容
a_file = open('f:a\b\c.txt','a')
# step2 向文件中写内容
# 写入100 行数据
for i in range(0,100):
# 每行具体的内容为行号+换行符
a_file.write(str(i)+'\n')
# step3 关闭文件
a_file.close()

读写Excel文件

python 读写Excel文件需要安装额外的包的进行支持

安装命令

pip3 install xlrd

pip3 install xlwt

除了这两个包之外还有其他的包可用,网上有人做了内容的整理,对这些包的优缺点进行了比较[python Excel读写包优缺点]

读取Excel文件

读取excel文件使用xlrd包,xlrd包对.xlsx后缀的文件支持不是很好,如果遇到问题,可以先将.xlsx的文件转换成.xls格式(用excel转)

import xlrd
excel_file = 'f:\a\b\c.xls'
# 打开一个xls文件
data = xlrd.open_workbook(excelFile)
# 获取第一个sheet(excel左下角的标签为sheet)
table = data.sheets()[0]
# 看看这个sheet中有多少行,多少列
nrows = table.nrows #行数
ncols = table.ncols #列数
for i in xrange(0,nrows):
#某一行数据
rowValues= table.row_values(i)
# 挨个打印这一行中的各列数据
for item in rowValues:
print item
# 获取某行某列的数据
my_value = table.cell_value(1,1)
print(my_value)
# 关闭文件
data.close()

写入Excel文件

进行写Excel文件时,需要引入xlwt的包

import xlwt
#创建workbook和sheet对象
#注意Workbook的开头W要大写
workbook = xlwt.Workbook()
sheet1 = workbook.add_sheet('sheet1',cell_overwrite_ok=True)
sheet2 = workbook.add_sheet('sheet2',cell_overwrite_ok=True)
#向sheet页中某行某列写入数据
# 行 列 内容
sheet1.write(0,0,'this should overwrite1')
sheet1.write(0,1,'aaaaaaaaaaaa')
sheet2.write(0,0,'this should overwrite2')
sheet2.write(1,2,'bbbbbbbbbbbbb')
"""
#-----------使用样式-----------------------------------
#初始化样式
style = xlwt.XFStyle()
#为样式创建字体
font = xlwt.Font()
font.name = 'Times New Roman'
font.bold = True
#设置样式的字体
style.font = font
#使用样式
sheet.write(0,1,'some bold Times text',style)
#保存该excel文件,有同名文件时直接覆盖
workbook.save('f:/a/b/c.xls')
print('创建excel文件完成!')