[python]文件的写入、读取和附加

本文详细介绍了Python中使用open()函数进行文件操作的方法,包括不同模式下文件的打开、读取和写入等基本操作,以及如何利用file对象提供的方法进行更复杂的文件处理任务。

来源:Python open() 函数 | 菜鸟教程

 

python open() 函数用于打开一个文件,创建一个 file 对象,相关的方法才可以调用它进行读写。

更多文件操作可参考:Python 文件I/O

 

函数语法

open(name[, mode[, buffering]])(name[, mode[, buffering]])

参数说明:

  • name : 一个包含了你要访问的文件名称的字符串值。

  • mode : mode 决定了打开文件的模式:只读,写入,追加等。所有可取值见如下的完全列表。这个参数是非强制的,默认文件访问模式为只读(r)。

  • buffering : 如果 buffering 的值被设为 0,就不会有寄存。如果 buffering 的值取 1,访问文件时会寄存行。如果将 buffering 的值设为大于 1 的整数,表明了这就是的寄存区的缓冲大小。如果取负值,寄存区的缓冲大小则为系统默认。

不同模式打开文件的完全列表:

模式描述
r以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
rb以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。
r+打开一个文件用于读写。文件指针将会放在文件的开头。
rb+以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
w打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
w+打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
wb+以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
a打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
ab以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
a+打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
ab+以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。

 

file 对象方法

file.read([size]) size未指定则返回整个文件,如果文件大小>2倍内存则有问题.f.read()读到文件尾时返回""(空字串)

file.readline() 返回一行

file.readlines([size]) 返回包含size行的列表,size 未指定则返回全部行

for line in f: print line #通过迭代器访问

f.write("hello\n") #如果要写入字符串以外的数据,先将他转换为字符串.

f.tell() 返回一个整数,表示当前文件指针的位置(就是到文件头的比特数).

f.seek(偏移量,[起始位置]) 用来移动文件指针.

  • 偏移量:单位:比特,可正可负
  • 起始位置:0-文件头,默认值;1-当前位置;2-文件尾

f.close() 关闭文件

 

实例

测试文件 test.txt,内容如下:

<span style="color:#000000">RUNOOB1
RUNOOB2</span>

>>>f = open('test.txt')>>> f.read()'RUNOOB1\nRUNOOB2\n'

<think>根据用户需求,用户需要PythonOpenCV进行图像读取写入的代码示例。根据提供的引用,引用[1]引用[2]都提到了图像读取写入的基本操作。 引用[1]简要说明了OpenCV-Python库用于图像读取写入,引用[2]中给出了具体的代码示例:读取图像显示图像。 引用[4]中还包含了将图像数据写入文本文件的代码,但用户主要关注的是图像的读取写入(保存)操作,因此我们重点展示读取保存图像文件。 因此,我将提供以下内容: 1. 读取图像文件 2. 显示图像(虽然不是写入,但通常与读取一起使用) 3. 将图像写入(保存)到文件 注意:用户请求的是“读取写入”,写入通常指将图像保存为文件,所以显示图像不是必须的,但常常是读取后需要验证的操作,因此一并给出。 同时,根据引用[2]的代码示例,我们使用`cv2.imread`读取图像,`cv2.imshow`显示图像,等待按键后关闭窗口,并使用`cv2.imwrite`保存图像。 另外,引用[4]中提到了将图像数据写入文本文件,但这不是通常意义上的图像写入(保存为图像格式),而是将像素值写入文本文件。如果用户需要,也可以作为一个附加示例提供。 因此,我计划: 1. 提供基本的图像读取、显示保存为图像文件的示例。 2. 附加一个将图像像素值写入文本文件的示例(因为引用[4]中有相关代码,可以作为额外内容)。 但用户明确要求的是“图像读取写入”,而写入通常指保存为图像文件,所以主要部分放在保存为图像文件附加文本写入作为可选。 步骤: 1. 读取图像:`cv2.imread` 2. 显示图像(可选,用于查看):`cv2.imshow``cv2.waitKey` 3. 保存图像:`cv2.imwrite` 4. 附加:将图像像素值写入文本文件(按引用[4]的代码) 注意:由于引用[4]的代码中,写入文本文件的部分是三重循环,分别写入每个像素的每个通道值,用空格分隔,每行对应图像的一行像素。但请注意,这种文本文件会很大。 代码结构: - 第一部分:基本读取、显示保存 - 第二部分:将图像数据写入文本文件附加) 另外,引用[3]是关于视频处理的,与当前问题无关,忽略。 最后,根据系统指令,需要生成相关问题。 </think>以下是使用PythonOpenCV进行图像读取写入的详细代码示例,基于您提供的引用内容整理: ### 图像读取与显示 ```python import cv2 # 读取图像 (支持格式: JPEG, PNG, BMP等) img = cv2.imread('input.jpg') # 替换为实际文件路径 # 验证图像是否成功加载 if img is None: print("错误: 图像加载失败,请检查文件路径") else: # 显示图像 cv2.imshow(winname='Image Preview', mat=img) cv2.waitKey(0) # 等待任意按键关闭窗口 cv2.destroyAllWindows() ``` ### 图像写入/保存 ```python # 保存处理后的图像 (自动检测文件格式) success = cv2.imwrite('output.png', img) # 格式由扩展名决定 if success: print("图像保存成功") else: print("错误: 图像保存失败") ``` ### 进阶操作(基于引用[4]) ```python # 获取图像元数据 print("图像维度:", img.shape) # (高度, 宽度, 通道数) print("像素总数:", img.size) # 总像素数量 print("数据类型:", img.dtype) # 通常是uint8 # 将像素值导出到文本文件 with open('pixel_data.txt', 'w') as f: height, width, channels = img.shape for y in range(height): for x in range(width): # 写入BGR值(OpenCV默认通道顺序) f.write(' '.join(str(img[y, x, c]) for c in range(channels)) + ' ') f.write('\n') # 换行分隔每一行像素 ``` ### 关键说明 1. **路径处理**: - 使用绝对路径(如`C:/images/input.jpg`)或确保相对路径正确 - 支持跨平台路径处理建议:`path = os.path.join('folder', 'image.png')` 2. **颜色通道**: - OpenCV默认使用`BGR`排序(非RGB),转换方法: ```python rgb_img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) ``` 3. **错误处理**: - `imread()`失败时返回`None` - `imwrite()`返回布尔值表示保存状态 4. **常用格式**: | 格式 | 特性 | 适用场景 | |---|---|--| | JPEG | 有损压缩 | 照片/网络传输 | | PNG | 无损压缩 | 需要透明通道 | | TIFF | 无压缩 | 医学/科研图像 | [^1]: OpenCV-Python基础图像操作 [^2]: 数字图像处理中的基本I/O操作 [^4]: 图像数据导出与元数据解析
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值