打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
 Python——文件操作

一、文件的打开与关闭
1、文件的打开
Python中,open方法用来打开文件,语法格式如下:
open(文件名[, 访问模式,encoding=编码格式])
上述格式中,“文件名”必须要填写,“访问模式”和“encoding”是可选的。

注意:使用open方法打开文件时,如果没有注明访问模式(默认是只读的访问模式),则必须保证文件是存在的,否则就会报错。如下所示:

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

  • r    以只读方式打开文件(read)。文件的指针将会放在文件的开头。默认模式。
  • w   打开一个文件只用于写入(write)。如果该文件已存在则将其覆盖;若文件不存在,创建新文件
  • a    打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建文件并写入。
  • rb   以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。默认模式。
  • wb  以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖;若文件不存在,创建新文件。
  • ab   以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建文件并写入。
  • r+    打开一个文件用于读写。文件指针将会放在文件的开头。文件若不存在,程序会crash。
  • w+   打开一个文件用于读写。如果该文件已存在则将其覆盖;若文件不存在,创建新文件。
  • a+    打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建文件用于读写。
  • rb+   以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
  • wb+  以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖;若文件不存在,创建新文件。
  • ab+   以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。

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

  1. f = open('test.txt')
  2. f.close()

4、安全的打开关闭文件的方式(自动调用close方法)

  1. with open("d://test.txt","w") as f:
  2. f.write("hello python")

或者

  1. with open("d://test.txt","w",endconding="utf-8") as f:
  2. f.write("hello 你好")

 

二、文件的读写
1、写文件

1.1 向文件写数据,需要用到write方法来完成,在操作某个文件时,每调用一次write方法,写入的数据就会追加到文件末尾。示例如下所示:

  1. f = open('itheima.txt','w')
  2. f.write('hello itheima, i am here!')
  3. f.write('\n')
  4. f.write('hello itheima, i am here!')
  5. f.write('\n')
  6. f.write('hello itheima, i am here!')
  7. f.write('\n')

        注意:当向文件写入数据的时候,如果文件不存在,那么系统会自动创建一个文件并写入数据。如果文件存在,那么会清空原来文件的数据,重新写入新的数据。

1.2  writelines向文件写入一个字符串序列

  1. f = open("test.txt","w",encoding="utf-8")
  2. f.writelines(["张三\n","李四\n","王五\n"])
  3. f.close()

 

2、读文件
从文件中读取数据时,可以通过多种方式来获取,具体如下。
2.1 使用read方法读取文件
read方法可以从文件中读取数据,该方法的定义语法如下:
read(size)
上述方法中,size表示要从文件中读取的数据的长度,单位为字节。如果没有指定size,那么就表示读取文件的全部数据。

使用read方法读取文件示例如下所示:

  1. f = open('itheima.txt','r')
  2. content = f.read(12)
  3. print(content)
  4. print('-'*30)
  5. content = f.read()
  6. print(content)
  7. f.close()

        注意:多次读取文件时,每次读取文件都会接着上次读取的位置读后面的数据。

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

  1. f = open('itheima.txt','r')
  2. content = f.readlines()
  3. print(type(content))
  4. i = 1
  5. for temp in content:
  6. print("%d:%s" %(i,temp))
  7. i += 1
  8. f.close()

2.3 使用readline方法一行一行读取数据

同样,以读取itheima.txt文件为例,该文件包含了三行数据,那么使用readline方法读取文件内容的方式如下所示:

  1. f = open('itheima.txt','r')
  2. content = f.readline()
  3. print('1:%s'%content)
  4. content = f.readline()
  5. print('2:%s'%content)
  6. f.close()

思考题:

如果一个文件很大,如5GB,试想应该怎么样把文件的数据读取到内存然后进行处理。

 

三、文件读写应用--制作文件的备份
实际开发中,文件的读写可以完成很多功能,如文件的备份就是文件读写的过程。假设,现在有一个文件“data.txt”,该文件存储的数据如下所示:

        If you were a teardrop;In my eye,
        For fear of losing you,I would never cry.
        And if the golden sun,Should cease to shine its light,
        Just one smile from you,Would make my whole world bright.

此时,如果想制作data.txt的备份文件,则需要读取原文件的数据,并将获取的数据写入备份文件。接下来,通过代码演示,如下所示:

  1. oldFileName = input("Please enter the name of the file to be copied:")
  2. oldFile = open(oldFileName,'r')
  3. if oldFile:
  4. fileFlagNum = oldFileName.rfind('.')
  5. if fileFlagNum > 0:
  6. fileFlag = oldFileName[fileFlagNum:]
  7. newFileName = oldFileName[:fileFlagNum] + '[copy]' + fileFlag
  8. newFile = open(newFileName, 'w')
  9. for lineContent in oldFile.readlines():
  10. newFile.write(lineContent)
  11. oldFile.close()
  12. newFile.close()

 

四、文件的定位读写
通过前面的了解,文件的读写都是顺序进行的。但是在实际开发中,可能会需要从文件的某个特定位置开始读写,这时,我们需要对文件的读写位置进行定位,包括获取文件
当前的读写位置,以及定位到文件的指定读写位置。接下来详细介绍这两种定位方式。

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

使用tell方法获取文件当前读写位置示例如下:

  1. f = open('test.txt','r')
  2. str = f.read(4)
  3. print('read data is :',str)
  4. position = f.tell()
  5. print('The current position :',position)
  6. str = f.read(8)
  7. print('read data is :',str)
  8. position = f.tell()
  9. print('The current position :',position)
  10. str = f.read(3)
  11. print('read data is :',str)
  12. position = f.tell()
  13. print('The current position :',position)
  14. f.close()

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

如果在读取文件的过程中,需要从指定的位置开始读写操作,就可以使用seek方法实现。seek方法的定义语法如下:
seek(offset[, whence])
seek方法的参数介绍如下所示:
(1)offset:表示偏移量,也就是需要移动的字节数
(2)whence: 表示方向,该参数的值有三个:
SEEK_SET或者0,whence参数的默认值,表示从文件的起始位置开始偏移
SEEK_CUR或者1,表示从文件当前的位置开始偏移
SEEK_END或者2,表示从文件末尾开始偏移
 

使用seek方法获取文件当前读写位置示例如下:

  1. f = open('test.txt','r')
  2. str = f.read(15)
  3. print('read data is :',str)
  4. position = f.tell()
  5. print('The current position :',position)
  6. f.seek(4)
  7. position = f.tell()
  8. print('The current position :',position)
  9. f.close()

 

五、文件的重命名和删除
有些时候,需要对文件进行重命名、删除等一些操作,Python的OS模块已经默认包含了这些功能,接下来,详细介绍这些操作。

1、文件的重命名
OS模块的rename方法可以实现完成对文件的重命名操作,格式如下:
OS.rename(src,dst)
其中src指的是需要修改的文件名,dst指的是修改之后的新的文件名。
示例:

  1. import OS
  2. OS.rename('毕业论文.txt','毕业论文-最终版.txt')


2、文件的删除
OS模块的remove方法可以实现完成对文件的删除操作,格式如下:
OS.remove(path)
path指的是指定路径下的文件。

示例:

  1. import OS
  2. OS.remove('毕业论文.txt')


六、文件夹的相关操作
1、创建文件夹
    OS模块的mkdir方法用来创建文件夹,示例代码如下所示:

  1. import OS
  2. OS.mkdir('wzb')


2、获取当前目录
OS模块的getcwd方法用来获取当前的目录,示例代码如下所示:

  1. import OS
  2. OS.getcwd()


3、改变默认目录
OS模块的chdir方法用来改变默认目录,例如,将当前目录改为上一级目录,代码如下所示:

  1. import OS
  2. OS.chdir('../')


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

  1. import OS
  2. OS.listdir('./')


5、删除空文件夹
OS模块的rmdir方法用来删除文件夹,例如,下面的代码删除了当前路径下的“wzb”目录:

  1. import OS
  2. OS.rmdir('wzb')

 

6、删除非空文件夹

  1. import shutil
  2. shutil.rmtree("d://testdir123")

 

 

 

 

 

 

 

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
python逐行读取文件内容的三种方法
python 如何将数据写入本地txt文本文件的实现方法
【每日一学】一文掌握Python中read、readline和readlines的区别
Python如何逐行读取文件?
Python 错误 IsADirectoryError: [Errno 21] Is a directory 解决方法
python基础篇:python文件处理
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服