Python学习笔记|Python文件操作

Bruce
2024-01-14 / 0 评论 / 15 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2024年01月15日,已超过127天没有更新,若内容或图片失效,请留言反馈。
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系统中建立路径的特殊符号
# ".\" :当前目录
# "..\":上一级目录

(二)文件编码

  1. 在Python 3.x版本中:文件默认编码是UTF-8;字符串使用的是Unicode编码;文本文件使用Unicode编码。
  2. 在Python语言中,对文本文件的存取以字符为单位,输入/输出的字符流开始和结束由程序控制。每个文件的结尾处通常由一个结束标志EOF。

二、文件夹与目录操作

(一)os.path模块

模块功能介绍:https://www.runoob.com/python/python-os-path.html
  1. 获取工作目录: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

(二)目录与文件操作

  1. 获得目录中的文件: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']
  1. 创建目录:os.mkdir(path)
os.mkdir("D://pythonProject//09 IO编程//test")
  1. 删除目录:os.rmdir(path)
os.rmdir("D://pythonProject//09 IO编程//test")

(三)文件的重命名与删除

  1. 文件重命名: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']
  1. 删除文件: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]])

参数说明:

  1. file:被创建的文件对象
  2. filename:要创建或打开的文件名称,需使用引号括起来
  3. mode:可选参数,用于指定文件的打开模式;
  4. buffering:可选参数,制定读写文件的缓冲模式。0表示不缓存,1表示缓存,大于1则表示缓冲区大小。默认缓存模式。

open()方法的应用场景有如下三种:

  1. 打开与新建文件

open()函数打开一个不存在的文件会抛出异常,指定mode参数值为w、w+、a、a+时,当文件不存在可以创建新的文件。

f = open("D://pythonProject//draft.py",'w')
  1. 以二进制形式打开文件

可以打开非文本文件,如图片、音频、视频等文件。

f = open("D://pythonProject//picture.jpg","rb")
  1. 打开文件时制定编码方式
f = open("D://pythonProject//picture.jpg","r", encoding = 'utf-8')

2. 文件关闭

文件关闭的语法格式:file.close()

文件打开后要及时关闭,原因在于:

  1. 资源管理:打开文件会占用系统资源,包括内存和文件描述符等。如果不及时关闭文件,会导致资源泄露,最终可能导致程序崩溃或运行缓慢。
  2. 数据完整性:在将数据写入文件时,如果没有及时关闭文件,可能会导致数据丢失或不完整。文件在关闭之前可能仍然处于缓冲状态,数据可能还没有完全写入磁盘。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个常用方法:

  1. write(string)方法:将字符串写入文件,并返回写入的字符数。write语句不会自动换行,如需换行要使用换行符'\n'。
  2. read(size)方法:read()方法从一个打开的文件中读取一个字符串。需要重点注意的是,Python字符串可以是二进制数据,而不是仅仅是文字。语法

语法:fileObject.read([size])

f = open('data.txt','r')
print(f.read(30))
Our wills unite like a fortres
  1. close()方法:File 对象的 close()方法刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。

语法:fileObject.close()

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
# 打开一个文件
f = open("data.txt", "w")
print ("文件名: ", f.name)
 
# 关闭打开的文件
f.close()
文件名:  data.txt
  1. 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()

(二)按行对文件进行读写

  1. 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
  1. 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
  1. readlines()方法

从文件指针当前的位置读取后面的所有数据,并将这些数据按照行结束符分隔后,放到列表中返回。

f = open("text.txt")
data = f.readlines()
print(data)
f.close()
['Hello,\n', 'Life is short,\n', 'I want to learn Python\n']

总结:

  1. read([size]):从文件当前位置读取size个字节,若无参数,则表示读取至文件结束。
  2. readline():该方法每次读取一行内容。
  3. readlines():读取整个文件所有行,并保存在一个列表变量中。
0

评论 (0)

取消