文章目录
- 写在前面
- 1. Python文件的打开、读写、关闭
- 1.1 第一步:打开文件——open()
- 1.2 第二步:从文件中读取/写入数据
- 1.2.1 读数据
- 1.2.1.1 read()
- 1.2.1.2 readlines()
- 1.2.1.3 readline()
- 1.2.2 写数据
- 1.3 关闭文件
- 1.4 小结对文件操作的模式
- 1.5 改变文件指针——seek()函数
- 1.6 文件名字符串的一些注意事项
- 2. Python文件与文件夹操作(os包)
- 2.1 文件自身操作
- 2.1.1 文件重命名
- 2.1.2 删除文件
- 2.2 文件夹相关操作
- 2.2.1 创建文件夹
- 2.2.2 删除文件夹
- 2.2.3 获取当前目录路径
- 2.2.4 改变默认目录
- 2.2.5 获取目录列表
- 2.2.6 文件夹重命名
- 3. 图像读取
- 3.1 scikit-image
- 3.2 PIL库(PILLOW) & imageio
写在前面
本博客分享在python中,文件的基本操作,如果读者对操作系统有了解,那会对文件操作有更加深刻的理解,但是本篇博客尽量避开操作系统的知识
我把本博客分成三个大部分:
①python文件的读写,主要是关于.txt格式的文件
②imageio,skimage.io,PIL,主要是关于图像的读写
③os包的一些读写操作
上述三个大部分是我在读别人写的代码时经常看到的,在这里总结总结。
1. Python文件的打开、读写、关闭
先介绍常用的函数和方法,最后总结一下对文件的操作模式。
1.1 第一步:打开文件——open()
f = open(name,mode) # return a Stream object f
该函数返回一个数据流对象对于对该文件进行读写操作
name:是要打开的目标文件名的字符串(可以包含文件所在的具体路路径)。
mode:设置打开⽂件的模式(访问模式):只读、写入、追加等
1.2 第二步:从文件中读取/写入数据
1.2.1 读数据
1.2.1.1 read()
- 多用来读取文件的全部数据
流对象.read(num)
num表示要从⽂件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据
1.2.1.2 readlines()
- readlines可以按照⾏的⽅式把整个⽂件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素
- 如果文件中有换行符,则一并读取出来
f = open('test.txt')
content = f.readlines()
print(content) # ['hello world\n', 'abcdefg\n', 'aaa\n', 'bbb\n', 'ccc']
# 关闭⽂文件 f.close()
1.2.1.3 readline()
- 一次读取一行内容。函数每运行一次,文件指针移到下一行为下次读取作准备
f = open('test.txt')
content = f.readline()
print(f'第⼀行:{content}')
content = f.readline()
print(f'第⼆行:{content}')
# 关闭⽂文件
f.close()
1.2.2 写数据
- 向文件中写入数据
- 注意事项:每次写入都要覆盖掉之前的内容;若要写入的文件不存在,则新建文件
文件对象.write('内容')
- 示例
# 1. 打开⽂文件
f = open('test.txt', 'w')
# 2.⽂文件写⼊入
f.write('hello world')
# 3. 关闭⽂文件
f.close()
1.3 关闭文件
- 关闭文件,释放掉内存
文件对象.close()
1.4 小结对文件操作的模式
下面总结一下函数open(name,mode)中参数mode的种类
- 所有以 r 开头的,如果文件不存在,则报错,不会新建文件;文件指针都会放在文件的开头;
- 所有以 w 开头的,如果文件不存在,则自动创建;文件指针都会放在文件的开头;每次执行该函数时会覆盖掉源文件
- 所有以 a 开头的,如果文件不存在,则自动创建;文件指针会放在文件的末尾用于附加数据,不会覆盖数据
1.5 改变文件指针——seek()函数
- 改变文件的指针,方便更加灵活的读取操作
⽂件对象.seek(偏移量量, 起始位置)
偏移量:移动的步长
起始位置:
0:文件开头
1:当前位置
2:文件结尾
1.6 文件名字符串的一些注意事项
" / “左倾斜是正斜杠,” \ "右倾斜是反斜杠,可以记为:除号是正斜杠一般来说对于目录分隔符,Unix和Web用正斜杠/,Windows一般用反斜杠,具体如下:
2. Python文件与文件夹操作(os包)
在Python中文件和文件夹的操作要借助os模块里面的相关功能,为什么是os模块,因为操作系统管理着文件系统,文件系统管理着文件(Python3.6以下常用,3.6之后使用pathlib.Path多一点)
2.1 文件自身操作
2.1.1 文件重命名
import os # 这里导入一次,往后就不再导入了!
os.rename(src,dst)
src:文件当前的路径
dst:要修改成什么样
2.1.2 删除文件
- 可能会出现要删除的文件找不到的错误
os.remove(src)
2.2 文件夹相关操作
2.2.1 创建文件夹
- 当文件夹已存在时,再去创建同名的文件夹会出错
import os
os.mkdir(src)
2.2.2 删除文件夹
import os
os.rmdir(src)
2.2.3 获取当前目录路径
- getcwd为 get current work directory,表示获取当前工作路径
os.getcwd()
2.2.4 改变默认目录
- 切换当前路径到指定路径,用处不大。比如说你现在文件的路径时a,你需要跑到b路径去操作一些东西,需要用到这个函数
os.chdir()
- 示例
import os
os.getcwd() # a路径
os.chdir('b路径')
os.getcwd() # b路径
2.2.5 获取目录列表
- 获取当前文件所处的文件夹下的所有文件,以列表形式返回
os.listdir()
2.2.6 文件夹重命名
- 还是os.rename()
os.rename(src,dst)
3. 图像读取
3.1 scikit-image
from skimage import io
img = io.imread('testimg.tif')
import numpy as np
data=np.random.random([100,100])
io.imsave('rand_data.tif',np.float32(data))
3.2 PIL库(PILLOW) & imageio
import numpy as np
import imageio
from PIL import Image #PIL pakage name is Pillow
img=imageio.imread(r'G:\leopard.jpg')
high,width,ichannel=img.shape
print(type(img))
print(img.shape)
imageio.imwrite(r'G:\leopard_i1.jpg',img)
imageio.imwrite(r'G:\leopard_i2.jpg',np.float32(img/10)) # automatic brightness adjust
imageio.imwrite(r'G:\leopard_i3.jpg',np.uint8(img/10))
im = Image.open(r'G:\leopard.jpg')
print(type(im))
in_data = np.asarray(im, dtype=np.uint8)
print(type(in_data))
print(in_data.shape)
new_im = Image.fromarray(in_data) # np.uint8, or TypeError: Cannot handle this data type
# new_im.show()
new_im.save(r'G:\leopard_p1.jpg')