文章目录

  • 写在前面
  • 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()

python file怎么定义 python __file_python file怎么定义

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一般用反斜杠,具体如下:

python file怎么定义 python __file_python file怎么定义_02

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')