如何读取含多种分隔符的无表头七列TXT文件?
解决混合分隔符TXT文件的读取问题
我来帮你搞定这个混合分隔符的文件读取问题!你的原代码出错,核心原因是没处理好前两列(空格分隔)和后续列(分号分隔)的混合格式——直接用split(';')会把日期和时间合并成一个字段,导致后面的所有字段索引都错位了。咱们来一步步修正:
核心思路
你的文件每行结构是:[日期] [时间];[开盘价];[最高价];[最低价];[收盘价];[成交量],所以正确的处理逻辑应该是:
- 先按分号
;拆分整行,得到的第一个元素是包含日期和时间的字符串,剩下的5个元素对应后续行情字段。 - 再把第一个元素按空格拆分,分离出日期和时间。
- 额外处理空行和换行符,避免读取到无效内容。
修正后的代码示例
# 使用with语句管理文件,自动处理文件关闭,更安全可靠 with open('ES 03-17.Last.txt', 'r') as min17_q1: for line in min17_q1: # 移除每行首尾的换行符、空格等空白字符 cleaned_line = line.strip() # 跳过空行,避免报错 if not cleaned_line: continue # 第一步:按分号拆分整行 line_parts = cleaned_line.split(';') # 第二步:拆分日期和时间(默认按任意空白符分割,兼容多个空格的情况) date_time = line_parts[0].split() Date = date_time[0] Time = date_time[1] # 后续字段直接对应拆分后的结果 Open = line_parts[1] High = line_parts[2] Low = line_parts[3] Close = line_parts[4] Volume = line_parts[5] # 可选:将行情字段转换为数值类型(如果需要进行计算的话) # Open = float(Open) # High = float(High) # Low = float(Low) # Close = float(Close) # Volume = int(Volume) # 打印验证结果 print(f"日期: {Date}, 时间: {Time}, 开盘价: {Open}, 最高价: {High}, 最低价: {Low}, 收盘价: {Close}, 成交量: {Volume}")
关键细节说明
with语句:替代直接open()的写法,能自动在代码块结束后关闭文件,避免资源泄漏。strip()处理:移除每行首尾的换行符和空白,防止拆分时出现空字符串。- 跳过空行:如果文件中有空行,直接跳过可以避免
index out of range的错误。 - 灵活拆分空白:用
split()(不带参数)而不是split(' '),可以自动处理多个空格的情况,适配格式可能的小差异。
内容的提问来源于stack exchange,提问作者user9050939
相关产品推荐
相关产品推荐

