文件操作
文件概念
文件的操作
这个定位是指定位到文件的那一部分
- 打开操作的r模式----只读,只能文件进行读操作
#1. 打开文件
f = open('a.txt','r') #相当于给文件开了一条管道,或者说接受返回的文件对象
#2. 进行操作
content = f.read()
print(content)
#3. 关闭文件
f.close()
- 打开操作的w模式----只写,只能对文件进行写操作
# 1. 打开文件
f = open('a.txt','w') #相当于给文件开了一条管道,或者说接受返回的文件对象
# 2. 进行操作
f.write('nihao')
# 3. 关闭文件
f.close()
- 打开操作的a模式----以追加的方式对文件进行只写操作,并且是在文件末尾进行只写操作
# 1. 打开文件
f = open('a.txt','a') #相当于给文件开了一条管道,或者说接受返回的文件对象
# 2. 进行操作
f.write('123')
# 3. 关闭文件
f.close()
- 前面的r,w,a可以和b组合
案例:对图片进行操作
# 1. 打开一张图片,取出内容,获取内容的前半部分
# 1.1 打开文件
f = open('1.png','rb')
# 1.2 读取文件内容
content = f.read()
print(content)
# 1.3 关闭文件
f.close()
# 2. 打开另一个图片,再把取出的前半部分,写入第二个图片中
# 2.1 打开目标文件
f1 = open('2.png','wb')
# 2.2 写入操作
content1 = content[0:len(content) //2]
f1.write(content1)
# 2.3 关闭文件
f1.close()
从图片结果看,第二张图片是第一张图片的一部分
- 前面的r,w,a可以和b+组合
r+是既可以读,又可以写的;如果在r+模式先写了两个操作,既有读又有写的操作,读在写前面的话,先读,指针到了最后,写的时候会把内容写在最后面。
文件的定位
- f.seek(offset,whence) 两个参数一个是开端,另外一个是依据那个参照点的变量
- f.tell是告诉当前指针位置在哪里
f = open('1.txt','r')
print(f.tell())
f.seek(2)
print(f.tell())
print(f.read())
print(f.tell())
f.close()
文件的读操作
- f.readline()是读取一行元素
f = open('1.txt','r')
result = f.readline()
print(result)
result1 = f.readline()
print(result1)
f.close()
这里我们看到每一次输出后下面都有一个空行,这是print函数导致的,我们在print函数后面用end的空字符结尾,不让他换行就可以解决
f = open('1.txt','r')
result = f.readline()
print(result,end='')
result1 = f.readline()
print(result1,end='')
f.close()
- f.readlines可以自动的将文件按照换行符进行处理,将处理好的每一行组成一个列表返回
f = open('1.txt','r')
content = f.readlines()
print(content)
f.close()
文件的遍历操作
import collections
f = open('1.txt','r')
print(isinstance(f,collections.Iterator)) #判断是不是可迭代的
for i in f:
print(i,end='')
f.close()
f = open('1.txt','r')
content = f.readlines()
for i in content:
print(i,end='')
f.close()
- 判断文件是否可读
f = open('1.txt','w')
if f.readable():
content = f.readlines()
for i in content:
print(i,end='')
f.close()
- 读取文件的注意事项:
文件的写入操作
f = open('1.txt','a')
if f.writable():
print(f.write('abc'))
f.close()
文件的关闭操作
文件的相关操作
要先导入os模块
- 重命名操作
os.rename(’原来的文件名’,‘现在的文件名’)
os.renames(和上面一样,只不过如果现在的文件不存在会自动创建)一层一层需修改,多级的进行修改
- 删除操作
- 创建文件夹
- 查看改变列表目录
- 文件的案例:要求把一个文件复制到另外一个文件中
为什么开头要加os模块呢,因为你当前位置不在文件夹呢,想要操作文件夹内的文件就要切换到当前模块下来进行复制操作
import os
os.chdir('file')
#文件的案例,实现文件的复制
# 1. 打开源文件和新文件,源文件可以是只读,新文件可以是追加
source_file = open('1.txt','r')
dis_file = open('1_bat.txt','a')
# 2. 从源文件中读取内容,放入目标文件中
content = source_file.read()
dis_file.write(content)
source_file.close()
dis_file.close()
当进行大文件复制的时候,可以一行一行进行复制,下面对一行一行进行复制的时候,要加个循环和判断,对于要复制的内容为0的时候就结束循环
- 案例2:文件的分类,根据不同的后缀名对文件进行不同的分类
# 1. 获取所有的文件名称列表
import os
import shutil
os.chdir('file') #切换到file目录下
file_list = os.listdir('./')
# print(file_list) #列表的形式
# 2. 遍历所有的文件名称
for file_name in file_list:
# print(file_name)
# 3. 分解文件的后缀名(尤其是最后一个.,比如这种的aa.xx.txt)
index = file_name.rfind('.')
# 根据这个索引,从当前位置开始取后面的后缀名
extension = file_name[index+1:] #切片处理取后缀
print(extension)
# 查看一下,是否存在同名的目录
# 如果不存在,直接创建一个目录
if not os.path.exists(extension):
os.mkdir(extension)
shutil.move(file_name,extension)