文件操作
1、open()函数的使用
# open() 他是一个内置函数
# 1.w 我的文件如果说是不存在的情况下 会自动的进行创建
# f = open(r'D:\python_study\day14文件操作\text01.txt', mode='w', encoding='utf-8')
# print(f.writable())
# # print(f.write('你好哦呀\n')) # 当我们是w模式下写入是会把之前的进行清空
# f.writelines('123\n456\n789')
# 2.a 追加模式 不存在创建
# f = open('test02.txt', mode='a', encoding='utf-8')
#
# print(f.writable())
# # print(f.write('123\n456\n789')) # 返回的是长度
# print(f.write('\n我是谁')) # 不会覆盖 而是会在后面进行继续写入
# 3.r 读取模式 不会主动的去创建文件夹
# f = open('test02.txt', mode='r', encoding='utf-8')
# print(f.readable())
# print(f.writable())
# print(f.read()) # 将所有的东西都读取出来
# print(f.readline(), end='@@')
# print(f.readline(), end='@@')
# print(f.readline())
# print(f.readlines())
# f = open('test02.txt', mode='r', encoding='utf-8')
# # 判断是否可读
# print(f.readable())
# # 逐行读取
# print(f.readline(), end='')
# # 读取所有 返回值为列表
# print(f.readlines())
# # 读取文件全部内容
# print(f.read()) # 指针已经读取到最后,所以往后读是没有内容的
# f = open("test02.txt", mode="r", encoding="utf-8")
'''
test02.txt的内容:
helloworld
你好
'''
# 汉字代表三个字节 换行代表两个字节 字母数字代表的是一个字节
# print(f.tell())
# print(f.readline(), end="")
# print(f.tell())
# print(f.readline())
# print(f.tell())
# 4.seek的使用
# f = open("test02.txt", mode="rb")
'''
helloworld
你好
'''
# 改变指针位置
"""
offset: 偏移量
whence: 0 从文件头开始 1 当前位置开始 2 文件尾
注意,当offset值非0时,Python要求文件必须要以二进制格式打开,
否则会抛出 io.UnsupportedOperation 错误。
"""
# print(f.tell())
# # 读取一个字节,文件指针自动后移1个数据
# print(f.read(1))
# print(f.tell())
# # 将文件指针从文件开头,向后移动到 5 个字符的位置
# f.seek(5)
# print(f.tell())
# print(f.read(1))
# 5.混合模式的使用
"""
r+(以读取为主) 打开一个文件用于读写。文件指针将会放在文件的开头。
w+(以写入为主) 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a+(以写入为主) 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
"""
# f = open('test02.txt', mode='r+', encoding='utf-8')
# print(f.writable())
# print(f.readable())
2、文件与文件夹操作
"""
模块 os 内置模块 内置库 专门用于处理文件的
导入的方式 import os
"""
import os
print(os.getcwd())
os.chdir('D:\python_study') # \ 对特殊字符进行转义
print(os.getcwd())
os.makedirs('BBB\ccc') # 以递归方式创建多个文件夹
os.rmdir('BBB\ccc') # 删除单个空文件夹
os.removedirs('BBB\ccc') # 以递归方式删除多个空文件夹
print(os.path.exists('BBB\ccc')) # -->判断该路径下的文件或文件夹是否存在
os.mkdir('img')
3、批量重命名
import os
# 先切换路径
os.chdir('testasd')
print(os.getcwd())
# 遍历此路径下的文件
file_list = os.listdir(os.getcwd())
print(file_list)
for file in file_list:
# 循环拼接
new_name = "python_" + file
# print(new_name)
os.rename(file, new_name)
4、文件备份
old_name = input("请输入文件名:") # text01.txt
index = old_name.rfind(".")
new_name = old_name[:index] + "备份" + old_name[index:]
# 老文件
old_f = open(old_name, "r") # 读取
# 新文件
new_f = open(new_name, "w") # 写入
cont = old_f.readlines() # 老文件全部的进行读取
print(cont)
new_f.writelines(cont) # 新文件全部写入
# 关闭文件
old_f.close()
new_f.close()
# """上下文管理器方法 不用我们手动的去关闭文件 会在运行完之后自动跟我们关闭"""
# f_ = open('test01.txt', mode='w', encoding='utf-8') # mode 可以省略不写
# f_.close()
#
# """建议使用这种"""
# with open('test01.txt', mode='w', encoding='utf-8') as f:
# f.writable()
# f.write('asd')
5、练习:用python创建文件data.txt,共100行,每行循环存放一个1~100之间的整数。
import random
with open("data.txt", mode="w+", encoding="utf-8") as f1: # 写入文件
for i in range(1, 101):
if i == 100:
f1.writelines(str(random.randint(1, 100)))
else:
f1.writelines(str(random.randint(1, 100)) + '\n')
with open("data.txt", mode="r+", encoding="utf-8") as f2: # 读取文件
count = 0
for i in f2.readlines():
print(i.replace(i, i.strip("\n")), end=" ")
count += 1
if count % 25 == 0:
print()
运行结果: