初中学历python学不会_人生苦短,我学不会Python。——Python文件操作

1.文件的打开与关闭

在Python中操作文件的整体过程很简单:

1).打开文件。

2).读/写数据。

3).关闭文件。

1.1文件的打开

在Python中,open方法用来打开文件,语法格式如下:

open(文件名[,访问模式])

上述格式中,“文件名”必须要填写,“访问模式”是可选的。

例如打开一个名称为“test.txt”的文件,示例代码如下:

f = open("test.txt")

需要注意的是,使用open方法打开文件时,如果没有注明访问模式,则必须保证文件是存在的,否则会报如下异常信息。

1.2文件模式

如果使用open方法打开文件时,只带一个文件名,那么我们只能读取文件。如果打开的文件允许写数据,则必须指明文件的模式。Python中文件的访问模式有很多种。

在罗列的模式中,“rb”“wb”“ab”模式都是以二进制的方式操作文件,通常这几种模式用于处理二进制类型的文件,如声音或者图像等。

1.3文件的关闭

凡是打开的文件,切记要使用close方法关闭。即使文件会在程序退出后自动关闭,但是考虑到数据的安全性,在每次使用完文件后,都要使用close方法关闭文件,否则一旦程序崩溃,很可能导致文件中的数据没有保存。close方法的使用非常简单,具体示例如下:

#新建一个文件,文件名为:test.txt

f = open("Python.txt","w")

#关闭这个文件

f.close()

2.文件的读写

文件最重要的能力是接收数据或者提供数据。文件的读写,无非是将数据写入文件或者从文件中读取数据,接下来,本节将分别针对文件的读写进行讲解。

2.1写文件

向文件写数据,需要使用write方法来完成,在操作耨个文件时,每调用一次write方法,写入的数据就会追加到文件末尾,接下来,通过一个案例来演示。

[1]: f = open("Python.txt","w")

[2]: f.write("Hello Python,i am here!")

[3]: f.write("\n")

[4]: f.write("Hello Python,i am here!")

[5]: f.write("\n")

程序运行后,会在程序所在的路径下生成一个名为Python.txt的文件。打开该文件,可以看到数据成功被写入。注意:当向文件写入数据是,如果文件不存在,那么系统会自动创建一个文件并写入数据。如果文件存在,那么会清空原来文件的数据,重新写入新数据。

2.2读文件

从文件中读取数据时,可以通过多种方式来获取,具体如下。

1.使用read方法读取文件

read方法可以从文件中读取数据,该方法的定义语法如下:

raad(size)

上述方法中,size表示要从问及那种读取的数据的长度,单位为字节。如果没有指定size,那么就表示读取文件的全部数据。

使用read方法读取文件

f = open("Python.txt","r")

content = f.read(12)

print(content)

print("-"*30)

content = f.read()

print(content)

f.close()

运行结果:

2.使用readlines方法读取文件

若文件的内容很少,则可以使用readlines方法把整个文件中的内容进行一次性读取。readlines方法会返回一个列表,列表中的每一个元素为文件中的每一行数据。假设文件“Python.txt”里有3行数据“Hello Python, i am here!”,那么,使用readlines方法读取文件的方式如下面所示。

f = open("Python.txt","r")

content = f.readlines()

num = 1

for temp in content:

print("%d:%s"%(num,temp))

num += 1

f.close()

运行结果:

3.使用readline方法一行一行读数据

同样,以读取Python.txt文件为例,该文件包含了3行数据,那么使用readline方法读取文件的方式如下面所示。

f = open("Python.txt","r")

content = f.readline()

print("1:%s"%content)

content = f.readline()

print("2:%s"%content)

f.close()

运行结果:

2.3文件读写的应用——制作文件的备份

实际开发中,文件的读写可以完成很多功能,如文件的备份就是文件读写的过程。假设,现在又一个文件“data.txt”,该文件储存的数据如图:

此时,如果想制作data.txt的备份文件,则需要读取源文件的数据,并将获得的数据写入备份文件。与原文件相比,备份文件储存的数据于源文件是一样的。接下来,通过代码来演示。

oldFileName = input("请输入要拷贝的文件的名字:")

oleFile = open(oldFileName,"r")

#如果打开文件

if oldFile:

#提取文件的后缀

fileFlagNum = oldFileName.rfind(".")

if fileFlagNum > 0:

fileFlag = oldFileName[fileFlagNum:]

#组织新的文件名字

newFileName = oldFileName[:fileFlagNum] + "[复件]" + fileFlag

#创建新文件

newFile = open(newFileName."w")

#把就文件中的数据,一行一行地复制到新文件中

for lineContent in oldFile.readlines():

newFile.write(lineContent)

#关闭文件

oldFile.close()

newFile.close()

运行程序,发现备份制作成功。

2.4文件的定位读写

在前面的学习中,文件的读写都是顺序进行的。但是在实际开发中,可能会需要从某个特定位置开始读写,这是,我们需要对文件的读写进行定位,包括获取文件当前读写位置。接下来对两种定位方式进行详细介绍,具体如下:

1.使用tell方法来获取文件当前的读写位置

在读写文件的过程中,如果想知道当前的位置,可以使用tell方法来获取。tell方法返回文件当前的位置,即文件指针当前的位置。

假设文件“Python.txt”的内容如下:

Hello Python, i am here!

Hello Python, i am here!

Hello Python, i am here!

此时,使用read方法读取文件数据的时候,获取当前数据的位置。

使用tell方法获取文件当前的读写位置。

#打开一个已经存在的文件

f = open("Python.txt","r")

str1 = f.read(4)

print("读取的数据是:",str1)

#查找当前位置

position = f.tell()

print("当前文件位置:",position)

str1 = f.read(8)

print("读取的数据是:",str1)

#查找当前位置

position = f.tell()

print("当前文件位置:",position)

str1 = f.read(3)

print("读取的数据是:",str1)

#查找当前位置

position = f.tell()

print("当前文件位置:",position)

f.close()

运行结果:

2.使用seek方法定位到文件的指定读写位置

如果在读写文件的过程中,需要从指定的位置开始读写操作,就可以使用seek方法实现。

seek方法的定义语法如下:

seek(offset[,whence])

seek方法的参数介绍如下:

(1)offset:表示偏移量,也就是需要移动的字节数。

(2)whence:表示方向,该参数得值有三个:

①SEEK_SET或0:whence参数的默认值,表示文件的起始位置开始偏移。

②SEEK_CUR或1:表示从文件当前的位置开始偏移。

③SEEK_END或2:从文件末端开始偏移。

同样以上面的文件“Python.txt”为例,假设要从文件开头偏移四个字节。

使用seek方法定位到文件的指定位置。

f = open("Python.txt","r")

str1 = f.read(15)

print("读取的数据是:",str1)

#查找当前位置

position = f.tell()

print("当前文件位置:",position)

#重新设置位置

f.seek(4)

#查找当前位置

position = f.tell()

print("当前文件位置:",position)

f.close()

运行结果:

如果将文件的读写位置定位在当前位置偏移四个字符的位置。

#打开一个已存在的文件

f = open("Python.txt","rb+")

str1 = f.read(15)

print("读取的数据是:",str1)

#查找当前位置

position = f.tell()

print("当前文件位置:",position)

#重新设置位置

f.seek(5,1)

#查找当前位置

position = f.tell()

print("当前文件位置:",position)

f.close()

运行结果:

将文件的读写位置定位在文件末尾三字节处。

#打开一个已经存在的文件

f = open("Python.txt","rb+")

str1 = f.read(15)

print("读取的数据是:",str1)

#查找当前位置

position = f.tell()

print("当前文件位置:",position)

#重新设置位置

f.seek(-4,2)

#查找当前位置

position = f.tell()

print("当前文件位置:",position)

f.close()

运行结果:

3.文件的重命名和删除

有时候需要对文件进行重命名、删除等操作,Python的os模块默认已经包含了这些功能。

3.1文件的重命名

os模块的rename方法可以完成对文件的重命名操作,格式如下:

os.rename(src,dst)

上述格式中,src指的是需要修改的文件名,dst指的是修改后的新文件名。

import os

os.rename("python.txt","Python.txt")

3.2文件的删除

os模块的remove方法可以完成对文件的删除操作,格式如下:

os.remove(path)

上述格式中,path指的是指定路径下的文件。

import os

os.remove("Python.txt")

4.文件夹的相关操作

实际开发中,有时需要用程序的方式对文件夹进行一定的操作,如创建、删除等。就像对文件操作需要os模块一样,如果要操作文件夹,同样需要os模块。

4.1创建文件夹

os模块的mkdir方法用来创建文件夹。

import os

os.mkdir("Neusoft")

4.2获取当前目录

os模块的getcwd方法用来获取当前的目录。

import os

os.getcwd()

4.3改变默认目录

os模块的chdir方法来改变默认目录,例如,将当前目录改编为上一级目录的代码如下:

import os

os.chdir("../")

4.4获取目录列表

os模块的listdir方法用来获取目录列表,例如,要获取当前路径下的子目录列表,代码如下:

import os

os.list("./")

4.5删除文件夹

os模块的rmdir方法用来删除文件夹。

import os

os.rmdir("Neusoft")

5.文件操作的应用—批量修改文件名

在日常生活中,经常会根据某些需求对文件的名字进行修改,可是,如果需要修改的文件太多,一个一个修改文件名的效率显然是很低的。这时我们可以借助刚学习的文件操作,编写一个批量修改文件名的小程序,这样省时省力,可以极大地提高工作效率。

假设现在有一批文件的名称需要修改,修改前和修改后的文件名如下图所示:修改前的文件名修改后的文件名

#批量在文件名前加前缀

import os

funFlag = 1

#1 表示添加标志 2 表示删除标志

folderName = "./"

#获取指定路径的所有文件名字

dirList = os.listdir(folderName)

#遍历输出所有文件名字

for name in dirList:

print(name)

if funFlag == 1:

newName = "[Python]-" + name

elif funFlag == 2:

num = len("[Python]-")

newName = name[num:]

print(newName)

os.rename(folderName+name,folderName+newName)

6.文件案例——学生管理系统(文件版)

前面在开发学生管理系统的时候,数据都是储存在变量中的。一旦程序结束或者崩溃,那么之前储存的数据都会消失。为了预防这种情况发生,我们可以借助文件来来储存数据。接下来,我们在之前的基础上,新增一个保存学生信息的功能,具体步骤如下。

(1)在表示菜单列表的函数中,新增一个保存数据的功能项,代码如下:

#打印功能提示

def printMenu():

print("=" * 30)

print("学生管理系统")

print("1.添加学生信息")

print("2.删除学生信息")

print("3.修改学生信息")

print("4.显示所有学生信息")

print("5.保存数据")

print("0.退出系统")

print("=" * 30)

(2)作为程序员,应该考虑写入数据后可以读取出来。我们知道,所有学生的信息保存在变量stuInfo中,它里面是多个字典。但是,write函数传入的参数必须是字符串类型,所以需要把字典强制转换成字符串。定义保存数据的函数,代码如下:

#保存当前所有的学生信息到文件中

def saveFile():

f = open("backup.data","w")

f.write(str(stuInfos))

f.close

(3)从文件读取到的内容是字符串,我们可以把这些带有特定格式的字符串转换成其原有的类型,所以调用eval函数把字符串转换成字典。定义从文件中恢复数据的函数,代码如下:

#恢复数据

def recoverData():

global stuInfos

f = open("backup.data")

content = f.read()

stuInfos = eval(content)

f.close()

(4)在main函数中执行,代码如下:

def main():

recoverData()#必须保证读取的文件中有数据

while 1 == 1:

printMenu()#打印功能菜单

key = input("请输入功能对应的数字:")

if key == "1":#添加学生信息

addStudent()

elif key == "2":#删除学生信息

delStudent(studentInfos)

elif key == "3":#修改学生信息

modifyStudent()

elif key == "4":#显示所有学生信息

showStudent()

elif key == "5":#保存学生信息到文件

saveFile()

elif key == "0":#退出系统

quitConfirm = input("真的要退出系统吗?(Yes or No):")

if quitConfirm == "Yes":

break

elif exit == "No":

pass

else:

print("输入有误,请重新输入")

else:

print("输入有误,请重新输入")

运行程序,添加一个学生信息并保存,如图所示。

打开backup.data文件,发现新增的数据成功保存到了文件中,如图所示。

Python其实没有那么难。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值