AI摘要:本文介绍了Python中文件操作的相关概念和基本操作。首先介绍了文件路径的表示方法,包括绝对路径和相对路径的示例。然后介绍了文件编码的概念,以及Python中对文本文件的存取方式。接着介绍了文件夹与目录操作,包括使用os.path模块获取工作目录、获取目录中的文件、创建目录和删除目录等操作。最后介绍了文件的重命名与删除操作,以及文件的打开与关闭、读取与写入、按行读写等操作。
一、文件相关概念
(一)文件路径
# 绝对路径示例
"D:\\lecture\\ex\\file.txt"
"D/lecture/ex/file.txt"
# 相对路径示例
# 假设`file.txt保存在D盘的lecture目录的ex子目录下,源程序保存在D盘的lecture目录下,那么包含相对路径的文件名应该保存为:
"ex\\file.txt"
"ex/file.txt"
# Windows系统中建立路径的特殊符号
# ".\" :当前目录
# "..\":上一级目录
(二)文件编码
- 在Python 3.x版本中:文件默认编码是UTF-8;字符串使用的是Unicode编码;文本文件使用Unicode编码。
- 在Python语言中,对文本文件的存取以字符为单位,输入/输出的字符流开始和结束由程序控制。每个文件的结尾处通常由一个结束标志EOF。
二、文件夹与目录操作
(一)os.path模块
模块功能介绍:https://www.runoob.com/python/python-os-path.html
- 获取工作目录:os.getcwd()
# 获取和改变当前目录
import os
print("当前的工作目录:", os.getcwd())
os.chdir('../')
print("改变后的工作目录:", os.getcwd())
当前的工作目录: D:\pythonProject\09 IO编程
改变后的工作目录: D:\pythonProject
import os
print(os.path.dirname("D:\pythonProject\09 IO编程")) #返回path目录
print(os.path.basename("D:\pythonProject\09 IO编程")) #返回path的最后文件名
print(os.path.exists('D://pythonProject/09 IO编程')) #判断文件路径是否存在
D:\
pythonProject9 IO编程
True
(二)目录与文件操作
- 获得目录中的文件:
os.listdir(patn)
os.listdir('D:\音乐')
['AlbumArtSmall.jpg',
'Folder.jpg',
'Home Free - Auld Lang Syne_英文(en)-auto.srt',
'Joel P West - Summer Storm.lrc',
'Joel P West - Summer Storm.mp3',
'videoplayback.mp4',
'周杰伦 - 听妈妈的话.flac',
'杨坤、郭采洁 - 答案.mp3',
'清明上河图.mp3',
'王力宏 - 需要人陪.mp3',
'纯音乐 - Love home.mp3',
'金玟岐-岁月神偷.mp3']
- 创建目录:
os.mkdir(path)
os.mkdir("D://pythonProject//09 IO编程//test")
- 删除目录:
os.rmdir(path)
os.rmdir("D://pythonProject//09 IO编程//test")
(三)文件的重命名与删除
- 文件重命名:
os.rename(src, dst)
src:要修改的文件名;dst:修改后的目录名
import os, sys
# 列出目录
print("目录为:%s" % os.listdir(os.getcwd()))
#重命名
os.rename("test", "test1")
print("重命名成功。")
# 列出重命名后的目录
print("重命名后的目录为:%s" % os.listdir(os.getcwd()))
目录为:['.idea', '.ipynb_checkpoints', '01 Python基础', '02 函数', '03 高级特性', '04 函数式编程', '05 模块', '06 面向对象编程', '07 面向对象的高级编程', '08 爬虫', '09 IO编程', 'draft.py', 'test']
重命名成功。
重命名后的目录为:['.idea', '.ipynb_checkpoints', '01 Python基础', '02 函数', '03 高级特性', '04 函数式编程', '05 模块', '06 面向对象编程', '07 面向对象的高级编程', '08 爬虫', '09 IO编程', 'draft.py', 'test1']
- 删除文件:
os.remove(path)
import os, sys
# 列出目录
print("目录为:%s" % os.listdir(os.getcwd()))
#移除
os.remove("test1.txt")
#移除后的目录
print("移除后的目录为:%s" % os.listdir(os.getcwd()))
目录为:['.idea', '.ipynb_checkpoints', '01 Python基础', '02 函数', '03 高级特性', '04 函数式编程', '05 模块', '06 面向对象编程', '07 面向对象的高级编程', '08 爬虫', '09 IO编程', 'draft.py', 'test1', 'test1.txt']
移除后的目录为:['.idea', '.ipynb_checkpoints', '01 Python基础', '02 函数', '03 高级特性', '04 函数式编程', '05 模块', '06 面向对象编程', '07 面向对象的高级编程', '08 爬虫', '09 IO编程', 'draft.py', 'test1']
三、文件的基本操作
(一)文件打开与关闭
https://www.runoob.com/python/python-files-io.html
1. 文件打开与新建
通过内置的open()
函数实现文件打开,基本语法格式为:
file = open(filename[,mode[,buffering]])
参数说明:
- file:被创建的文件对象
- filename:要创建或打开的文件名称,需使用引号括起来
- mode:可选参数,用于指定文件的打开模式;
- buffering:可选参数,制定读写文件的缓冲模式。0表示不缓存,1表示缓存,大于1则表示缓冲区大小。默认缓存模式。
open()方法的应用场景有如下三种:
- 打开与新建文件
open()
函数打开一个不存在的文件会抛出异常,指定mode参数
值为w、w+、a、a+
时,当文件不存在可以创建新的文件。
f = open("D://pythonProject//draft.py",'w')
- 以二进制形式打开文件
可以打开非文本文件,如图片、音频、视频等文件。
f = open("D://pythonProject//picture.jpg","rb")
- 打开文件时制定编码方式
f = open("D://pythonProject//picture.jpg","r", encoding = 'utf-8')
2. 文件关闭
文件关闭的语法格式:file.close()
文件打开后要及时关闭,原因在于:
- 资源管理:打开文件会占用系统资源,包括内存和文件描述符等。如果不及时关闭文件,会导致资源泄露,最终可能导致程序崩溃或运行缓慢。
- 数据完整性:在将数据写入文件时,如果没有及时关闭文件,可能会导致数据丢失或不完整。文件在关闭之前可能仍然处于缓冲状态,数据可能还没有完全写入磁盘。3.
文件锁定:在某些操作系统中,打开文件时会将其锁定,防止其他程序对其进行修改。如果不及时关闭文件,会导致其他程序无法访问或修改该文4. 件。
代码可读性和维护性:显式地关闭文件可以使代码更加清晰和易于理解。关闭文件可以明确地表示文件的使用范围,并帮助避免可能的错误和混乱。
# 不同模式下文件的打开与关闭操作
#r:如果文件不存在,报错;不支持写入操作,只读
f = open('data.txt','r')
# f = open('test.txt','r') # [Errno 2] No such file or directory: 'test.txt'
# f.write('aa') # UnsupportedOperation: not writable
#w:只写,如果文件不存在,新建文件;执行写入,会覆盖原有内容
f = open('data.txt','w')
f.write('Our wills unite like a fortress')
f.close
#a:追加,如果文件不存在,新建文件;在原有内容的基础上,追加新内容
f = open('data.txt','a')
f.write('Public clamor can melt metals')
f.close
29
#访问模式参数可以省略,默认为r
f = open("data.txt")
f.close
(二)文件读取与写入
open()函数
打开文件后,会返回一个TextIOWrapper对象,然后可以调用该对象中的方法对文件进行操作。该对象有4个常用方法:
- write(string)方法:将字符串写入文件,并返回写入的字符数。write语句不会自动换行,如需换行要使用换行符'\n'。
- read(size)方法:
read()方法
从一个打开的文件中读取一个字符串。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。语法
语法:fileObject.read([size])
f = open('data.txt','r')
print(f.read(30))
Our wills unite like a fortres
- close()方法:File 对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。
语法:fileObject.close()
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 打开一个文件
f = open("data.txt", "w")
print ("文件名: ", f.name)
# 关闭打开的文件
f.close()
文件名: data.txt
- seek(offset [,from])方法:Offset变量表示要移动的字节数(正数向右,负数向左)。From变量指定开始移动字节的参考位置。
如果from被设为0,将从文件的开头作为移动字节的参考位置。如果设为1,则使用当前的位置作为参考位置。如果它被设为2,那么该文件的末尾将作为参考位置。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 打开一个文件
f = open("data.txt", "r+")
str = f.read(30)
print ("读取的字符串是 : ", str)
# 查找当前位置
position = f.tell()
print ("当前文件位置 : ", position)
# 把指针再次重新定位到文件开头
position = f.seek(0, 0)
str = f.read(10)
print ("重新读取字符串 : ", str)
# 关闭打开的文件
f.close()
读取的字符串是 : Our wills unite like a fortres
当前文件位置 : 30
重新读取字符串 : Our wills
f = open('test.txt','w')
f.write('The best way to learn Englihs is using it.')
f.close()
f = open('test.txt','a')
f.write('\nThe best way to learn Englihs is to use it.')
f.close()
(二)按行对文件进行读写
writelines()
方法
指定一个字符串类型的列表,然后将每行文本作为单独的元素写入列表。
fo = open("text.txt","w")
print("读写的文件名是:", fo.name)
seq = ["Hello,\n","Life is short,\n","I want to learn Python\n"]
line = fo.writelines(seq)
fo.close()
读写的文件名是: text.txt
readline()
方法
该方法返回一个字符串,遇到结束符即停止,读取的内容包含结束符。
f = open("text.txt")
while True:
lines = f.readline()
if lines =='':
break
else:
print(lines)
f.close()
Hello,
Life is short,
I want to learn Python
readlines()
方法
从文件指针当前的位置读取后面的所有数据,并将这些数据按照行结束符分隔后,放到列表中返回。
f = open("text.txt")
data = f.readlines()
print(data)
f.close()
['Hello,\n', 'Life is short,\n', 'I want to learn Python\n']
总结:
- read([size]):从文件当前位置读取size个字节,若无参数,则表示读取至文件结束。
- readline():该方法每次读取一行内容。
- readlines():读取整个文件所有行,并保存在一个列表变量中。
评论 (0)