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
这个错误通常是由于文件的实际编码与指定的编码不一致导致的。在读取文件时,我们必须使用与文件编码一致的编码方式。可以尝试以下方法修正该问题:
-
尝试更改文件编码格式。如果该文件已经存在较长时间,可能会出现文件格式已经变化但文件后缀并未更新的情况。您可以尝试重新保存文件,并采用其他编码格式(如UTF-8)保存,然后再次运行程序看是否能解决该问题。
-
尝试使用其他编码方式。如果文件的实际编码无法确定,可以尝试使用其他常见的编码方式来打开文件并读取内容。例如,可以尝试使用'gbk'和'utf-16'等编码方式尝试打开文件。
-
指定正确的编码方式。如果您确认文件的编码方式,请在打开文件时显式指定正确的编码方式。
下面是在打开文件时指定编码方式的代码示例:
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
语句来实现该操作。
源代码下载