使用while循环(禁用with open)实现特定规则文件解码的技术求助
使用while循环(禁用with open)实现特定规则文件解码的技术求助
看起来你已经搭好了解码规则的核心函数findNext,接下来只需要补全字符遍历、收集和文件写入的逻辑就可以啦!我帮你梳理下思路并补全代码:
首先,你当前的decode函数有几个小问题需要调整:
- 用
readlines()会把文件拆成每行的列表,但解码逻辑是连续处理所有字符(包括换行符),所以应该用read()把整个文件读成一个完整字符串 - 原
while file[0:]的写法会导致无限循环,我们需要用一个索引指针来跟踪当前处理的位置,避免越界
完整的解码步骤和代码
- 读取整个文件的字符流,统一处理所有字符
- 用索引指针跟踪当前位置,循环收集有效字符
- 最后将收集到的结果写入输出文件(同样不用
with open,手动管理文件打开/关闭)
补全后的代码如下:
def findNext(char): X = ord(char) if X >= 48 and X <= 57: value = X - 40 elif X >= 64 and X <= 90: value = X - 60 elif X >= 97 and X <= 122: value = X - 90 else: if X % 2 != 0: value = X + 1 else: value = X + 2 return value def decode(inputFile, outputFile): # 读取整个文件内容为连续字符串,手动关闭文件 file = open(inputFile, 'r', encoding='utf-8') file_content = file.read() file.close() current_index = 0 decoded_chars = [] total_length = len(file_content) # 用while循环遍历字符,基于索引控制位置 while current_index < total_length: # 当前字符是有效字符,加入结果列表 current_char = file_content[current_index] decoded_chars.append(current_char) # 计算需要跳过的字符数,移动到下一个有效字符的位置 move_ahead = findNext(current_char) current_index += move_ahead + 1 # +1是跳过当前字符,再往后跳move_ahead个字符 # 写入输出文件,手动关闭文件 output = open(outputFile, 'w', encoding='utf-8') output.write(''.join(decoded_chars)) output.close() # 调用解码函数,指定输入和输出文件路径 decode('helloworld.txt', 'decoded_result.txt')
关键逻辑解释
- 我们用
current_index跟踪当前有效字符的位置,每次处理完后,根据findNext返回的偏移量,把索引移动move_ahead + 1位(跳过当前字符后,再往后跳move_ahead个字符,下一个位置就是下一个有效字符) - 因为不能用
with open,所以每次打开文件后要手动调用close(),避免资源泄漏 - 最后用
''.join(decoded_chars)把收集到的字符列表转成完整字符串,写入输出文件就能得到你想要的Hello world 1 2 3!!!
你可以直接运行这段代码测试,如果偏移量计算有细节需要调整,再根据实际情况微调findNext函数就好~
备注:内容来源于stack exchange,提问作者Jacob Byerly
相关产品推荐
相关产品推荐

