如何在Python 2.7中处理文件读取时遇到的ASCII 11垂直制表符Vertical Tab
问题处理方案
ASCII码为11的垂直制表符在Python中可以用转义字符\v直接匹配,你只需要在读取到内容后、执行业务逻辑前,将内容中的\v替换为空格或直接删除即可解决读取中断问题。
你可以直接使用修改后的代码:
import sys import os import codecs v_filename=str(sys.argv[1]) if not os.path.exists(v_filename): print('Data file not found'+v_filename) sys.exit(1) v_out_file=str(v_filename)+'_converted' print(v_out_file) with codecs.open(v_filename,'r',"utf-8") as file: with codecs.open(v_out_file,'w',"utf-8") as v_variable_file: linesf=file.readlines() # 处理表头的垂直制表符,替换为空格,要删除则把' '换成'' header_line=str(linesf[0]).replace('\v', ' ') tralier_line=str(linesf[-1]).replace('\v', ' ') if (header_line[0:17]).strip() == "Accounts1File" : v_variable_file.write((header_line[0:17])+'|'+(header_line[17:20])+'|'+(header_line[20:28])+'|'+(header_line[28:36])+'|'+(header_line[36:44])+'\n') else: print("Header identifier not matching") file.seek(0) for line in file: # 处理每行的垂直制表符,替换为空格,要删除则把' '换成'' line = str(line).replace('\v', ' ') v_keyword=str(line[0:17]).strip() if v_keyword == "AcctSummary" : v_variable_file.write(line[0:17]+'|'+line[17:67]+'|'+line[67:117]+'|'+line[117:372]+'|'+line[372:382]+'|'+line[382:412]+'\n') elif v_keyword == "CustSummary" : v_variable_file.write(line[0:17]+'|'+line[17:67]+'|'+line[67:117]+'|'+line[117:132]+'|'+line[132:136]+'\n') elif v_keyword == "ProfileActivity" : v_variable_file.write(line[0:17]+'|'+line[17:57]+'|'+line[57:157]+'|'+line[157:207]+'|'+line[207:226]+'\n') elif v_keyword == "Accounts1File" or v_keyword == "AgentFile": pass else: print("NOT IN SCOPE:"+line) sys.exit(1)
补充说明
- 替换规则可根据需求调整:要直接删除垂直制表符,将代码中
replace('\v', ' ')的第二个参数改为空字符串''即可 - 该处理逻辑完全兼容Python 2.7版本,不会影响原有业务的字段截取逻辑
内容的提问来源于stack exchange,提问作者Sidd
相关产品推荐
相关产品推荐

