python基础学习路线:
· 数据分析之python基础篇{基础语法}
· 数据分析之python基础篇{数据类型}
· 数据分析之python基础篇{控制流语句}
· 数据分析之python基础篇{函数}
· 数据分析之python基础篇{模块}
· 数据分析之python基础篇{文件操作}
· 数据分析之python基础篇{Pymysql}
· 数据分析之python基础篇{面向对象}
打开文件
在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件 open(文件名,访问模式)
f = open('drrrink.txt','r',encoding='UTF-8')
文件名如果没有指定当前文件夹路径,那么是默认在当前文件夹寻找的, 也可以指定文件路径寻找文件 只需要在文件名前加入文件的路径即可,
f = open('E:\代码\数据分析\00、配套的学习资料(课件 数据、软件等)\\example.txt','r',encoding='UTF-8')
此外文件夹的访问模式默认是读模式,就是说,只可以读,不能修改。如果只要指定访问模式,可以直接在open函数内第二参数填写即可。
常见的编码: UTF-8,GBK,一般来说
encoding = ’UTF-8‘
是要写的。
访问模式
访问模式 | 说明 |
---|---|
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
w | 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
w+ | 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |
文件的关闭
执行文件操作时,最后一定不能忘记的操作是关闭文件,即使报错了也要 close。普通的方式是在 finnally 块中显示的调用 close 方法。
如果不关闭文件:
- 会导致内存始终被占用, 得不到释放
- 会导致文件被占用中, 无法删除, 剪切等操作
f = open('drrrink.txt',encoding='UTF-8')
f.close()
# 这是会在内存中释放文件, 文件才可以删除
文件的读写
读数据read()
使用read(num)可以从文件中读取数据,num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。
read函数只可以读取一次
f = open('drrrink.txt',encoding='UTF-8')
type(f)
data = f.read()# 没有传入num,读取文件中所有的数据。
print(data)
f.close()
f = open('drrrink.txt', 'r',encoding='UTF-8')
content = f.read(5) # 指针向后阅读5个位置
print(content)
print("-"*30)
content = f.read()
print(content)
f.close()
注意:
- 如果open是打开一个文件,那么可以不用写打开的模式,即只写
open('test.txt')
- 如果使用读了多次,那么后面读取的数据是从上次读完后的位置开始的
f = open('drrrink.txt', 'r',encoding='UTF-8')
content = f.read(3)
print(content)
f.read(3) # 读进来就是一个字符串
f.close()
将txt文件里表格形式处理成列表
f= open("student_grade.txt", 'r',encoding='UTF-8')
data = f.read()
data.splitlines() # 处理成列表
# 新建一个空列表
student_garde = []
for line in data.splitlines():
student_garde.append(line.split('\t'))
print(student_garde)
将txt文件里表格形式处理成字典
f= open("student_grade.txt", 'r',encoding='UTF-8')
data = f.read()
data.splitlines()
# 定义一个空字典
student_dict = {}
for line in data.splitlines():
t = line.split('\t')
student_dict[t[0]] = t[1:]
student_dict['刘帅']
student_dict['刘帅'][-1]
读数据readlines
就像read没有参数时一样,readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素
f = open("决策树的几个辅助函数.ipynb", "r", encoding='utf-8')
data = f.readlines()
写数据
content = '''hahahahahahahhauihdquihgdasuighdpiad'''
f = open('mengyou.txt','w',encoding= 'UTF-8') # w模式下可以对文件进行写操作
f.write(content) # 写入后,一定要关闭文件
f.close()
如果文件内没有内容,
w模式下的write
可以直接进行写操作,但是如果本身文件内有内容的话。w模式下的write
会直接覆盖直接写的内容。
追加模式
# 不想删除原来的,想在后面追加新的内容
f = open('mengyou.txt','a',encoding ='UTF-8')
al = '''德玛西亚之力''
f.write('\n\n')
f.write(al)
f.close()
练习
- 复制中文版文章内容,赋值给变量
- 写入到本地文件中,名称为 我有一个梦想.txt
- 重新打开文件, 在文件后面追加 英文版内容
- 以读取方式打开文件, 把文件内容按换行符进行分割操作
dream = '''链接内的内容'''
f = open('我有一个梦想.txt','a',encoding='UTF-8')
f.write(dream)
f.close()
dream1 = '''英文版内容'''
f = open('我有一个梦想.txt','a',encoding='UTF-8')
f.write('\n\n')
f.write(dream1)
f.close()
f = open('我有一个梦想.txt','r',encoding='UTF-8')
data = f.readlines()
f.close()
文件的重命名、删除
有些时候,需要对文件进行重命名、删除等一些操作,python的os
模块中都有这么功能
文件重命名
os模块中的rename()
可以完成对文件的重命名操作,rename(需要修改的文件名, 新的文件名)
import os
os.rename("我有一个梦想.txt", 'dream.txt')
删除文件
os模块中的remove()
可以完成对文件的删除操作,remove(待删除的文件名)
import os
os.remove("我不太会了.txt")
文件夹的相关操作
import os
os.mkdir('中国河南大学') # 创建了文件夹名叫中国河南大学
os.getcwd() # 获取文件夹的路径
os.listdir() # 获取当前的目录内容
os.rmdir("中国河南大学") # 删除文件夹
练习
制作文件的备份
# 新建一个用于备份的文件夹
# 获取待备份文件夹中的所有文件夹列表
# 循环依次使用open()读入文件,然后写入到指定的文件夹中
from datetime import datetime
dt = datetime.now()
time = dt.strftime('&Y%m%d') #时间字符串
pre = '新备份文件'
import os
if not os.path.exists('备份文件夹'):
os.makedirs('备份文件夹')
for filename in os.listdir('应用'):
f = open('应用/'+filename,'r',encoding='utf-8')
data = f.read()
f.close()
# 写文件
f = open('备份文件夹/'+time+'_'+pre+'_'+filename,'w',encoding='UTF-8')
f.write(data)
f.close()
批量修改文件名
import os
os.mkdir('应用')
# 获取文件夹下面的所有文件
os.listdir('应用')
pre = '[备份文件]-'
for filname in os.listdir('应用'):
os.rename('应用/'+filname,'应用/'+pre+filname)
# 如果想修改文件夹内的txt文件,可以这么写
# 只改txt文件
for filname in os.listdir('应用'):
# 判断是不是txt
if filname[-4:] == '.txt':
os.rename('应用/'+filname,'应用/'+pre+filname)
附录: os方法大全
import os
print(os.getcwd()) # 获得当前工作目录
print(os.chdir("dirname")) # 改变当前脚本的工作路径,相当于shell下的cd
print(os.curdir) # 返回当前目录‘.'
print(os.pardir) # 获取当前目录的父目录字符串名‘..'
print(os.makedirs('dirname1/dirname2')) # 可生成多层递归目录
print(os.removedirs('dirname1/dirname2')) # 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
print(os.mkdir('test4')) # 生成单级目录;相当于shell中mkdir dirname
print(os.rmdir('test4')) # 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
print(os.listdir('/pythonStudy/s12/test')) # 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
print(os.remove('log.log')) # 删除一个指定的文件
print(os.rename("oldname","newname")) # 重命名文件/目录)
print(os.stat('/pythonStudy/s12/test')) # 获取文件/目录信息
print(os.pathsep) # 输出用于分割文件路径的字符串';'
print(os.name) # 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
print(os.system(command='bash')) # 运行shell命令,直接显示
print(os.environ) # 获得系统的环境变量
print(os.path.abspath('/pythonStudy/s12/test')) # 返回path规范化的绝对路径
print(os.path.split('/pythonStudy/s12/test')) # 将path分割成目录和文件名二元组返回
print(os.path.dirname('/pythonStudy/s12/test')) # 返回path的目录。其实就是os.path.split(path)的第一个元素
print(os.path.basename('/pythonStudy/s12/test')) # 返回path最后的文件名。如果path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
print(os.path.exists('test')) # 判断path是否存在
print(os.path.isabs('/pythonStudy/s12/test')) # 如果path是绝对路径,返回True
print(os.path.isfile('test')) # 如果path是一个存在的文件,返回True。否则返回False
print(os.path.isdir('/pythonStudy/s12/test')) # 如果path是一个存在的目录,则返回True。否则返回False
print(os.path.getatime('/pythonStudy/s12/test')) # 返回path所指向的文件或者目录的最后存取时间
print(os.path.getmtime('/pythonStudy/s12/test')) # 返回path所指向的文件或者目录的最后修改时间