005-文件
2020-05-14 本文已影响0人
痞子_4ae7
文件操作介绍
- 文件的概念
- 文件的作用
- 数据持久化
文件的打开与关闭
-
生活实例(文件的操作)
- 打开work文档
- 修改数据
- 保存文件
- 关闭word
python编程中,操作文件也一样 打开文件/创建文件 读写文件 关闭文件
-
打开文件
- 函数语法
open(文件名,访问方式) f = open('123.txt','w')
- 作用
- 打开已经存在的文件,或者创建一个新的文件
-
常用访问方式:
r :只读 指向文件头 默认方式
w :只写 已经存在会覆盖,没有则创建新的
a :追加 存在,指向文件为,没有则创建新的
r+ :读写 指向文件的开头
w+ :读写 已经存在会覆盖,没有创建新的
a+ :读写 文件已存在,则指向文件尾部,
进行追加内容,没有则创建新文件
- 关闭文件
- 函数语法
文件.close() f = open('123.txt','a+') f.close()
文件的读写
-
写数据
- 语法
使用函数write('要写入的内容')
- 案例
f=open('123.txt','w') f.write('Hello World!') f.close()
- 练习
将你最喜欢的一首古诗写入到指定文件中 循环写
-
读数据(read)
- read(num)
从指定的文件中读取长度为num的数据 如果没有给num具体值,则读取所有(以 字符串的形式返回)
- 案例
def readMethod(): f = open('125.txt','r') result = f.read() # str 类型 print(type(result)) print(result) f.close()
-
读数据(readLines)
def readMethod1():
f = open('125.txt','r')
result = f.read()
# list 类型
print(type(result))
print(result)
f.close()
- 读数据(readLine)
f = open('125.txt','r')
#读取一个第一行字符串出来
result = f.readline()
# str 类型
print(type(result))
print(result)
f.close()
自定义文件复制工具(讲解思路)
- 思路讲解
- 打开源文件,判断源文件是否有效,有效进行后续操作
- 新文件名字的生成 旧文件名+[复件]+.后缀(用到查找rfind,以及切片操作)
- 开始复制文件(1. 整体复制 2.循环逐行复制)
- 关闭文件
- 代码
# 复制文件方法,旧文件[附件].后缀
def copyFile2(srcFileName):
oldFileName = srcFileName
# 先判断文件是否存在
f = open(oldFileName, 'r')
print(type(f))
# 如果存在进行后续操作
if f:
# 截取出文件名字
index= oldFileName.rfind('.')
# 截取出文件后缀
suffix = oldFileName[index:]
# 新文件名为
newFileName = oldFileName[:index]+'[复件]'+suffix
newFile = open(newFileName,'w')
content = f.read()
newFile.write(content)
newFile.close()
f.close()
copyFile2('125.txt')
文件的定位读写
- 获取当前的位置
- 方法
文件名.tell() 可以获取文件指针当前在文件中的位置
- 用法
f = open('125.txt','r') content = f.read(3) position = f.tell() print("当前的位置为:%d"%position) content = f.read(4) position = f.tell() print("当前的位置为:%d"%position)
-
定位到某个位置
- 方法
seek(offset,from) offset:偏移位置 from:三个值 0:文件头 1:当前位置 2:文件位
- 用法
例:从文件头跳过2个字节,复制3个字节
f = open('125.txt','r')
# 从文件头开始跳过2个字节
f.seek(2,0)
# 获取当前位置
position = f.tell()
print("当前位置:%d"%position)
# 读取2个字节
content = f.read(2)
print(content)
f.close()
例:从文件尾部取2个字节(如果是从尾部进行重定位的话,需要以二进制形式打开文件)
# 从文件尾读取2个字节(尾部操作,需要使用二进制的形式打开 b)
f = open('125.txt', 'rb')
# 从尾部往前偏移2个字节
f.seek(-2, 2)
content = f.read()
print(content)
文件的重命名与删除
OS模块中的有对文件进行重命名以及删除的方法
-
文件重命名
- 方法
rename('需要修改的文件名','新的文件名')
- 用法
#注意:要修改的文件一定要保证没有被其他占用 import os os.rename('125.txt','127.txt')
-
文件的删除
- 方法
remove(待删除文件的名字)
- 用法
import os remove('126.txt')
文件的相关操作
同样需要导入os模块
-
创建文件夹
- 方法
mkdir()
- 用法
import os os.mkdir()
-
获取当前目录
- 方法
getcwd()
- 用法
import os os.getcwd()
-
改变默认目录
- 方法
chdir()
- 用法
import os os.chdir("要修改到的默认目录")
-
获取目录列表
- 方法
listdir('指定文件夹')
- 用法
import os os.listdir('d:/2018教学')
-
删除文件夹
- 方法
rmdir('文件夹路径')
- 用法
import os os.rmdir('陈独秀文件夹')
代码行数统计器
- 统计某个文件中的代码行数,忽略注释
# 统计一个xxx.py中所有的代码
def getNumberOfCodeLines(filename):
count = 0
# 后边的encoding='utf-8' 解决中文读取问题
f = open(filename, 'r', encoding='utf-8')
if f:
# 如果文件存在,开始统计
content = f.readline()
while content != '':
if not content.startswith("#"):
count += 1
content = f.readline()
return count
- 打印一个文件夹中所有的文件名(递归解决)
def showAllFilesInDir(dirName):
listfiles = os.listdir(dirName)
for file in listfiles:
# 文件路径为 文件夹名字+文件名
newpath = dirpath+"/"+ file
# 如果是文件夹
if os.path.isdir(newpath):
# 递归调用自己
showAllFilesInDir(newpath)
elif os.path.isfile(newpath):
print(newpath)
课后练习
图书管理系统(数据持久化版,知识拓展)