Python实现分号分隔文本文件转列、规则处理及排序
实现代码
直接用pandas批量处理即可,无需逐行循环读取,调整后的代码如下:
import pandas as pd # 1. 读取分号分隔的源文件,无表头 datafile = r"path\你的文件名.txt" df = pd.read_csv(datafile, sep=';', header=None) # 2. 删除Rate(第3列,索引3)和Operator(第5列,索引5) df = df.drop(columns=[3,5]) # 3. 插入空列作为第4列(索引4) df.insert(4, 'empty_col', '') # 4. 处理Offline行的数值后移 # 此时列索引对应关系:0=ID,1=月份,2=年份,3=Customer,4=空,5=在线状态,6=原始数值 # 新增第7列,Offline行将数值移到第7列,Online行第7列为空 df[7] = df.apply(lambda x: x[6] if x[5] == 'Offline' else '', axis=1) # Online行数值保留在第6列,Offline行第6列为空 df[6] = df.apply(lambda x: x[6] if x[5] == 'Online' else '', axis=1) # 5. 按第一列(ID)升序排序,如需按其他字段排序可修改by参数 df = df.sort_values(by=0).reset_index(drop=True) # 6. 输出为对齐格式的txt文件 # 方案1:制表符分隔,适合后续程序读取 df.columns = [0,1,2,3,4,5,6,7] df.to_csv("New_"+datafile.split('\\')[-1], sep='\t', index=False, header=True) # 方案2:固定空格宽度对齐,和你给出的示例效果完全一致,取消下方注释即可使用 # with open("New_"+datafile.split('\\')[-1], 'w', encoding='utf-8') as f: # # 写表头 # f.write(f"{'0':<10}{'1':<7}{'2':<8}{'3':<10}{'4':<5}{'5':<10}{'6':<8}{'7':<}\n") # # 逐行写内容 # for _, row in df.iterrows(): # f.write(f"{row[0]:<10}{row[1]:<7}{row[2]:<8}{row[3]:<10}{row[4]:<5}{row[5]:<10}{str(row[6]):<8}{str(row[7]):<}\n")
注意事项
- 路径字符串前加
r是为了避免Windows路径的反斜杠被识别为转义字符 - 如果需要修改列的对齐宽度,调整输出字符串中
<后的数字即可,数字代表该列占用的字符数
内容的提问来源于stack exchange,提问作者Sertev
相关产品推荐
相关产品推荐

