实现.ppm图像像素反转时,如何移除嵌套列表与元组括号输出纯像素数值?
问题根源
- 你当前输出带括号、带引号的元组格式,本质是打印时直接把存储RGB值的元组对象解包输出,Python会原样打印元组的字符串结构,没有拆分内部的通道值
- 你需要的纯数值输出,是把每行所有像素的R、G、B通道值依次平铺,用空格分隔,完全移除元组的包裹结构
代码修正步骤
- 逐行遍历反转后的像素行时,把每个像素元组里的三个通道值全部拆出,拉平成一维的数值序列
- 把拆分后的字符串转成整数,用固定宽度格式化,匹配你给出的排版对齐效果
- 用空格把所有格式化后的数值拼接成单行内容,同时支持打印和写入文件的逻辑
修正后完整代码
takePPM = input("Enter the pmm file name: ") try: openFile = open(takePPM, "r") readFile = openFile.readlines() openFile.close() except FileNotFoundError: print("File not found") exit(1) lists = [] for row in readFile[3:]: lists.append(row.split()) # 按每3个值分组为RGB像素元组 target = [] for list in lists: target.append([tuple(list[i:i+3]) for i in range(0, len(list), 3)]) # 完成像素行反转 revList = [] for i in reversed(target): revList.append(i) # 打开输出文件 newFile = open("Mirror_" + takePPM, "w") # 逐行生成纯数值格式的内容 for row in revList: flat_content = [] for pixel in row: # 拆分每个像素的RGB通道,转成整数后做固定宽度对齐 r, g, b = [int(channel) for channel in pixel] flat_content.extend([f"{r:2d}", f"{g:2d}", f"{b:2d}"]) # 拼接成单行 line = " ".join(flat_content) # 打印到控制台 print(line) # 写入文件,加换行符分隔 newFile.write(line + "\n") newFile.close()
实际输出效果
修正后的内容完全移除元组的括号、包裹的引号,所有通道值按顺序平铺,单值占2位宽度对齐,和你给出的示例排版完全一致:
0 0 0 0 0 0 0 0 0 15 0 15 0 0 0 0 15 7 0 0 0 0 0 0 0 0 0 0 0 0 0 15 7 0 0 0 15 0 15 0 0 0 0 0 0 0 0 0
内容的提问来源于stack exchange,提问作者MMSS19
相关产品推荐
相关产品推荐

