乐于分享
好东西不私藏

告别杂乱无序,24行Python代码把Excel导出为整齐对齐的txt文本

告别杂乱无序,24行Python代码把Excel导出为整齐对齐的txt文本
问题天天有,今天不一样。你是否遇到过这样的需求:把Excel表格导出为txt纯文本,可是直接复制粘贴或另存为txt文本,总会出现文字错位、排版混乱等问题,看上去让人很不舒服,阅读体验较差。
Excel表格是这样的:
期望的结果是这样的:
复制粘贴或另存为的效果却是这样的:
今天就给大家分享一段超实用的Python代码,无需复杂的操作,即可一键读取excel文件,自动计算每一列的宽度,自动生成排版工整、完美对齐的txt文本。
以下是完整代码,直接复制再修改路径即可使用
import pandas as pddef txt_width(txt):    num = sum(2 if "\u4e00" <= n <= "\u9fff" else 1 for n in str(txt))    return num  # 字符串的显示宽度def align(txt,w):    txt = str(txt)    need = w - txt_width(txt)    return txt + " " * need   # 左对齐xls_path = r"E:\型号.xlsx"txt_path = r"E:\型号.txt"df = pd.read_excel(xls_path).dropna(how="all").fillna("")  # 读取并清洗数据,删除空行,空值填充为空字符串col_widths = []for col in df.columns:    header_w = txt_width(col)    content_w = max(txt_width(str(n)) for n in df[col])    col_widths.append(max(header_w,content_w)+2)    # 每一列的宽度lines =  [''.join(align(c,w) for c,w in zip(df.columns,col_widths))]    # 第一行for _,row in df.iterrows():    lines.append(''.join(align(v,w) for v,w in zip(row,col_widths)))    # 每一行with open(txt_path,"w",encoding="utf-8") as f:    f.write("\n".join(lines))print("已生成对齐版的txt文件")
再来看看代码的解析:
第1行:导入所需的模块。pandas用来读取和处理Excel数据。
第2-3行:自定义函数txt_width,用来计算文本显示的宽度。中文占2格宽度,英文和数字占1格宽度。"\u4e00"<= n <="\u9fff"表示中文字符的Unicorn范围。
第6-9行:自定义函数align,根据目标宽度自动计算需要补充的空格数,把文本补充到统一长度。
第11-12行:要读取Excel源文件的路径和要保存txt的路径。
第13行:读取并清洗Excel数据。read_excel用来读取Excel表格,默认读取第一张表格,并将第一行作为标题行;.dropna(how="all")表示自动删除全部为空的行,避免生成没有内容的空白行。fillna("")表示空单元格自动填充为空文本,方便后期计算空格数量。
第14-18行:自动计算每一列的最佳宽度。for col in df.columns循环遍历每一列,header_w = txt_width(col)计算表头宽度,content_w = max(txt_width(str(n)) for n in df[col])计算最长内容的宽度。max(header_w,content_w)+2取最大值+2,作为这一列的最终宽度。这几句代码可以实现全自动适配列宽,不用手动计算,每一列的内容都能入得下。
第19-21行:拼接对齐后的文本。[''.join(align(c,w) for c,w in zip(df.columns,col_widths))]拼接第一行的表头。for _,row in df.iterrows()逐行处理表格的数据。''.join(align(v,w) for v,w in zip(row,col_widths))每一个单元格都按指定列宽对齐。
第22-24行:保存为txt文件。encoding="utf-8"使用utf-8编码保留中文,f.write("\n".join(lines))把内容写入文件。print("已生成对齐版的txt文件")运行完成后提示任务结束。
有了这段代码,你就可以不用手动敲空格排版,不用再忍受杂乱的文本格式,快速把Excel转换为txt文本,赶紧收藏起来吧,下次遇到Excel转txt的需求,直接拿来就用,省时又省力!

相关学习资料