【Python】文件的操作

282 阅读5分钟

对本地文件的操作步骤,常见有以下几种:

  1. 打开文件所在位置
  2. 打开文件
  3. 操作文件
  4. 关闭文件

文件操作的作用:

文件的操作包括:打开、关闭、读、写、复制...

作用:读取内容、写入内容、备份内容,把一些内容(数据)存储起来,方便下次直接使用,省时省力。

open():打开文件

在python,使⽤open()函数,可以打开⼀个已经存在的文件,或者创建⼀个新文件,语法如下:

语法:open(file, mode = 'r', encoding = utf-8)

file:文件路径,是要打开的目标文件名的字符串(可以包含文件所在的具体路径)

mode:设置操作文件的访问模式(r只读、w写入、a追加)

encoding:指定文件编码格式

image.png image.png

w(写入)模式:当文件不存在时创建文件,再次写入时会覆盖原来的内容。

  • f.writable()          -->  判断是否可写
  • f.write(str)           -->  写入内容,返回值为写入字符串的长度
  • f.writelines(seq) --> 写入多行,但需要自己添加换行符
f = open('test_001.txt', mode='w', encoding='utf-8')

# 判断是否可写入
print(f.writable())  # 返回布尔值,True

# 写入内容
f.write('这里是我写入的内容')

# 写入多行
f.writelines('今天是5月25号,\n今天开始学习文件的常见操作。')

# 关闭文件:释放资源
f.close()

a(追加)模式:当文件不存在时创建文件,再次写入时为追加。

fi = open('text_002.txt', mode='w+', encoding='utf-8')

# 判断是否可写
print(fi.writable())

# 写入内容
fi.write('换成中文\n')

# 写入多行
# fi.writelines('a(追加)模式,\n写入多行内容')

# 关闭文件:释放资源
fi.close()

总结:

w(写入)、a(追加):如果文件不存在则创建该文件; 若文件存在,w(写入)模式会清空后再写入;

a(追加)则是直接在末尾追加。

r(只读)模式:

  • f.readable()           --> 判断是否可读,返回值为布尔
  • f.read(n)                --> 读取全部,在python3中n为字符
  • f.readline()            --> 逐行读取,包括\n
  • f.readlines()           --> 读取所有,返回值为列表,包括\n
  • f.tell() --> 文件指针所处文件位置
  • seek() --> 作用:用来移动文件指针
# f_3 = open('text_003.txt', mode='r', encoding='utf-8')   文件不存在,直接报错
f_3 = open('text_002.txt', mode='r', encoding='utf-8')

# 判断是否可读
print(f_3.readable())  # True

# 逐行读取
# print(f_3.readline())   # 只读取一行内容:这个文件是a(追加)模式a(追加)模式,

# 读取所有,返回值为列表
# print(f_3.readlines())

# 读取文件的全部内容read():
print('调用read()读取全部内容:', f_3.read())

tell():判断文件指针当前所处的位置:

一个汉字,代表 3 个字节
换行,代表 2 个字节
数字/英文/小数点/下划线/空格,代表 1 个字节
\n,代表 1 个字节
f_4 = open('text_002.txt', mode='r', encoding='utf-8')

print('判断文件指针当前所处的位置:', f_4.tell())  # 最开始时,在起始位置,0
print('逐行读取内容:', f_4.readline())  # 读取一行内容
print(f_4.tell())  # 逐行读取后,指针停在该行的结束位置

# print(f_4.readline())  # 只有一行内容时,逐行读取结束后再调用逐行读取,打印为空
# print(f_4.tell())

seek():指定指针位置:

f_5 = open('text_002.txt', mode='r', encoding='utf-8')

print(f_5.tell())   # 0
print(f_5.read(1))  # 读取一个字节,文件指针自动后移1个数据
print(f_5.tell())

print(f_5.seek(3))
print(f_5.read(2))
print(f_5.tell())

验证拓展:

"""事实证明,python11中,\n占一个字节"""
with open('test_003.txt', mode='w') as f:
    f.writable()
    f.write('\n')
    print("文件指针当前位置:", f.tell())

"""老师的代码,运行出来,\n也是占一个字节,应该是和 python 版本有关系"""
f = open('text02.txt', mode='w', encoding='utf-8')
print(f.tell())
f.write('\n')
print(f.tell())

文件备份:

首先,文件要存在,才能备份,否则直接上来就随便输入一个文件名,并进行备份,会报错。
其次,已经备份过的文件,再次运行程序,不会继续备份。
"""
备份思路:
1、接收用户输入的目标文件名(xx)
2、规划备份文件名(xx备份.后缀)
3、备份文件写入数据
"""

old_name = input('输入文件名:')
index = old_name.find('.')

# 在原有的文件名加上备份俩字
new_name = old_name[:index] + '备份' + old_name[index:]

"""备份文件写入数据:"""
old_f = open(old_name, 'r')  # 读取旧文件

new_f = open(new_name, 'w')  # 写入新文件

contents = old_f.readlines()  # 读取旧文件的所有内容
print('这是读取的旧文件中的所有内容:', contents)
new_f.writelines(contents)    # 全部写入新文件中

old_f.close()
new_f.close()

文件与文件夹的操作:

在Python中文件和文件夹的操作要借助os模块里面的相关功能,具体步骤如下:

os.getcwd()           --> 用来打印当前工作目录

os.chdir()            --> 改变当前工作目录

os.makedirs()        --> 以递归方式创建多个文件夹

os.removedirs()    --> 以递归方式删除多个空文件夹

os.mkdir()             --> 创建单个文件夹

os.rmdir()             --> 删除单个空文件夹

os.path.exists()     --> 判断该路径下的文件或文件夹是否存在

os.path.join()        --> 拼接路径

导入os模块:
import os

文件重命名:
os.rename(目标文件名,新文件名)

删除文件
os.remove(目标文件名)

创建文件夹
os.mkdir(文件夹的名字)

删除文件夹
os.rmdir(文件夹名字)

获取当前目录
os.getcwd()

改变默认目录
os.chdir(目录)

获取目录列表
os.listdir(目录)

更改文件/文件夹的位置:

import os

print(os.getcwd())  # 获取当前目录
# os.chdir('//Users//username//Desktop//Maria//python//basics//Day14_文件的操作')
# 改变默认目录:
# os.chdir('//Users//username//Desktop//')
# print(os.getcwd())

创建文件夹(以递归的方式创建多个文件夹):

"""只创建一次,已存在的话则报错:File exists"""

os.makedirs('//Users//username//Desktop//Maria//python//basics//Day14_文件的操作//aaa//bbb')  # 以递归的方式创建多个文件夹
os.rmdir('aaa')   # 删除文件夹:报错,因为不是一个空文件夹

# 判断该路径下的文件或文件夹是否存在
print(os.path.exists('//Users//username//Desktop//'))  # True

关闭文件:

"""上下文管理器方法,不用我们手动的去关闭文件,会在运行完之后自动关闭"""
fi_1 = open('test_001.txt', mode='w', encoding='utf-8')
fi_1.close()

"""建议这样关闭文件:"""
with open('test_004.txt', mode='w', encoding='utf-8') as fi_1:
    fi_1.writable()  # 判断是否可写入
    fi_1.write('这是写入的内容')

简易的批量重命名:

import os

# os.chdir()  改变当前工作目录
os.chdir('//Users//liangli//Desktop//批量重命名')
print(os.getcwd())  # 打印当前工作目录

# 遍历此路径下的文件
file_list = os.listdir(os.getcwd())
print(file_list)

for file in file_list:

    # 循环拼接
    new_name = '01_' + file
    print(new_name)

    os.rename(file, new_name)