如何用Python正确分隔文本文件列数据并转为指定顺序的独立列表?
解决固定宽度文本列提取与反转问题
问题根源
pd.read_fwf失效的核心原因是输入文本的列并非严格固定宽度——部分行缺少尾部列元素,零散空格会被误判为列分隔,导致第一列出现元素聚类。直接手动解析每行内容更可靠。
分步解决方案
1. 手动解析文本,提取列元素
逐行读取文件,清理冗余符号后拆分元素,避免自动对齐错误:
import pandas as pd # 读取并过滤空行 with open("input.txt", "r") as f: lines = [line.strip() for line in f if line.strip()] # 处理每行:移除方括号、拆分元素、过滤空值 processed_rows = [] for line in lines: cleaned = line.replace("[", "").replace("]", "") elements = [elem for elem in cleaned.split() if elem] processed_rows.append(elements) # 转为DataFrame,用空值填充列数不足的行 df = pd.DataFrame(processed_rows).fillna(pd.NA)
2. 反转列顺序并生成目标列表
遍历每一列,提取非空值后反转顺序(将原列最后一个元素移到列表首位):
column_lists = {} for idx, col in enumerate(df.columns): # 提取非空值并反转 reversed_vals = df[col].dropna().tolist()[::-1] column_lists[f"list{idx + 1}"] = reversed_vals # 输出结果示例 for name, lst in column_lists.items(): print(f"{name} = {lst}")
效果验证
比如输入文本是类似:
[N] [Z] [D] [T] [V] [W] [F] [L]
处理后会得到:
list1 = ['W', 'D', 'N'] list2 = ['F', 'T', 'Z'] list3 = ['L', 'V']
内容的提问来源于stack exchange,提问作者jaeson
相关产品推荐
相关产品推荐

