python案例文本文件的处理以及PIL库(源代码详细讲解)

1. 打开“作业.txt”,分别打出文件中前30个字符和前3行内容

2. 在当前文件路径下创建一个新文件"木兰辞.txt",并将作业.txt中所有内容写入该文档,并在前面添加“木兰辞”为首行。

# 打开文件并读取前30个字符
with open('作业.txt', 'r') as f:
    first_30_chars = f.read(30)
    print(first_30_chars)

# 打印文件前3行内容
with open('作业.txt', 'r') as f:
    first_3_lines = []
    for i in range(3):
        line = f.readline()
        first_3_lines.append(line)
    print(''.join(first_3_lines))

# 读取作业.txt的内容
with open('作业.txt', 'r', encoding='utf-8') as f:
    content = f.read()

# 在当前文件路径下创建一个新文件"木兰辞.txt"
with open('木兰辞.txt', 'w', encoding='utf-8') as f:
    # 在新文件的第一行添加“木兰辞”为首行
    f.write("木兰辞\n")
    # 将作业.txt中所有内容写入该文档
    f.write(content)

如果出现以下错误

utf-8' codec can't decode byte 0xdf in position 0: invalid continuation byte

这个错误通常是由于文件的实际编码与指定的编码不一致导致的。在读取文件时,我们必须使用与文件编码一致的编码方式。可以尝试以下方法修正该问题:

  1. 尝试更改文件编码格式。如果该文件已经存在较长时间,可能会出现文件格式已经变化但文件后缀并未更新的情况。您可以尝试重新保存文件,并采用其他编码格式(如UTF-8)保存,然后再次运行程序看是否能解决该问题。

  2. 尝试使用其他编码方式。如果文件的实际编码无法确定,可以尝试使用其他常见的编码方式来打开文件并读取内容。例如,可以尝试使用'gbk'和'utf-16'等编码方式尝试打开文件。

  3. 指定正确的编码方式。如果您确认文件的编码方式,请在打开文件时显式指定正确的编码方式。

下面是在打开文件时指定编码方式的代码示例:

with open('作业.txt', 'r', encoding='gbk') as f:
    content = f.read()

在以上示例中,我们将编码方式指定为'gbk',以便正确读取该文件的内容。

 2.拍一张校园的图片,保存为"校园.jpg",并使用PIL库进行图片处理
(1)打印出图片的尺寸,并将图片长、宽各缩小一半(取整),并保存为“校园1.jpg”
(2) 将“校园.jpg”旋转180度,并保存为“校园2.jpg”
(3) 分离“校园.jpg”中RGB通道,并将红色通道和蓝色通道数据交换,生成新的图片,保存为“校园3.jpg”
(4) 获取“校园.jpg”的轮廓,并保存为“校园4.jpg”

from PIL import Image, ImageDraw

# 打开校园图片
with Image.open("校园.jpg") as im:
    # 显示原始图片的尺寸
    print("原始图片尺寸:", im.size)
    
    # 缩小图片并保存为“校园1.jpg”
    new_size = (im.width//2, im.height//2)  # 取半操作
    im.thumbnail(new_size)  # 缩小图片
    im.save("校园1.jpg")  # 保存缩小后的图片
    print("缩小后的图片尺寸:", im.size)

    # 旋转图片并保存为“校园2.jpg”
    rotated_im = im.rotate(180)  # 进行旋转操作
    rotated_im.save('校园2.jpg')  # 保存旋转后的图片

    # 获取红色和蓝色通道,并将它们交换,保存为“校园3.jpg”
    r, g, b = im.split()  # 分离RGB通道
    new_im = Image.merge("RGB", (b, g, r))  # 重新合成新的RGB通道
    new_im.save("校园3.jpg")  # 保存交换红、蓝通道后的图片

    # 获取图片轮廓并保存为“校园4.jpg”
    draw = ImageDraw.Draw(im)  # 创建画布
    draw.rectangle((0, 0, im.width-1, im.height-1), outline="red")  # 在画布上绘制矩形轮廓
    del draw  # 删除画布对象
    im.save("校园4.jpg")  # 保存带有红色轮廓的图片

第一行代码from PIL import Image, ImageDraw中,我们导入了Pillow库中的Image和ImageDraw模块。这两个模块分别提供了对图片和图片上的文字、几何图形等进行处理和操作的能力。

第三行代码with Image.open("校园.jpg") as im:中,我们使用Image.open()函数打开指定路径下名为“校园.jpg”的图片,并将其赋值给变量im。由于open()方法返回的是一个文件对象,因此我们使用完毕后需要将其关闭,使用Python的with语句可以自动实现该操作。

在第5行中,我们通过调用im.size获取了原始图片的尺寸。该属性返回一个元组,包含了图片的宽度和高度。

在第8行中,我们创建了一个元组new_size,该元组的第一个元素是原始图片宽度的一半,第二个元素是原始图片高度的一半。接下来,我们在im上调用thumbnail()方法,该方法缩小了图片的尺寸并保留了原始图片的长宽比例,最后将结果保存到指定路径下的文件“校园1.jpg”中。

在第12行,我们首先对im进行了180度的旋转操作,然后使用save()方法将结果保存为指定路径下的文件“校园2.jpg”。

在第16行中,我们使用了split()方法将原始图片的RGB通道分离出来,并将其赋值给变量r, g, b

在第17行中,我们利用Pillow库中的Image.merge()方法重新合成一个新的RGB通道,该通道中红色和蓝色通道的数据被互换了位置。最后,我们使用save()方法将结果保存到指定路径下的文件:“校园3.jpg”。

在第21行中,我们创建了一个画布,并在该画布上绘制了一个矩形轮廓。该轮廓覆盖了整个图片,并按照指定颜色进行了边缘描边。最后,我们使用save()方法将结果保存到指定路径下的文件:“校园4.jpg”。需要注意的是,在完成轮廓提取后,要将刚才创建的画布对象从内存中删除以释放资源,此时我们使用了del语句来实现该操作。

源代码下载

 登录 - Gitee.com

猜你喜欢

转载自blog.csdn.net/m0_62338174/article/details/130276495