Python读取文本时如何正确分割含空格的文件名字段?
提取固定格式文本中的Name字段方案
针对你遇到的文件格式,以下几种Python方法可以准确提取Name部分,即使Name包含空格也不受影响:
方法1:固定列宽切片
观察文本结构,前5列(Date、Time、Attr、Size、Compressed)的总宽度是固定的。计算后可知,Name字段从每行的第51个字符开始,直接切片即可:
with open('your_file.txt', 'r', encoding='utf-8') as f: lines = f.readlines() # 跳过表头和分隔线 for line in lines[2:]: # 切片后去除前导空格,得到纯净的Name name = line[51:].strip() print(name)
方法2:正则表达式匹配
用正则匹配每行的固定格式,精准捕获最后一个字段的内容,适配所有符合格式的行:
import re # 正则模式匹配前5列的格式,捕获最后部分为Name pattern = r'^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} [A-Z.]+\s+\d+\s+\d+\s+(.*)$' with open('your_file.txt', 'r', encoding='utf-8') as f: for line in f: line = line.strip() # 跳过无关行(表头、分隔线、空行) if not line or line.startswith('Date') or line.startswith('---'): continue match_result = re.match(pattern, line) if match_result: name = match_result.group(1) print(name)
方法3:csv模块处理多空格分隔
利用csv模块支持多空格分隔的特性,自动拆分列后拼接Name部分:
import csv with open('your_file.txt', 'r', encoding='utf-8') as f: # 跳过表头和分隔线 next(f) next(f) # 以任意数量空格为分隔符,忽略字段前的空格 reader = csv.reader(f, delimiter=' ', skipinitialspace=True) for row in reader: # 前5个元素是其他列,剩下的拼接为Name(处理空格情况) name = ' '.join(row[5:]) print(name)
内容的提问来源于stack exchange,提问作者Pson
相关产品推荐
相关产品推荐

