Python提取文本文件字段名:截断每行首个空格后的内容
解决Python提取字段名并输出的问题
先说说你代码里的几个问题,这也是导致报错的核心原因:
- 你把输入文件
test_text.txt用'w'模式打开了,这个模式是只允许写入的,根本没法读取内容,自然会抛出"not readable"的错误。 - 输出文件
my_file_edit.txt没指定打开模式,默认是'r'只读模式,就算前面的问题解决了,你也没法往里面写东西。 - 逻辑上也不对:你要提取的是每个字段定义里首个空格前的字段名,但你的代码是把每行按空格分割后取第1个及以后的部分再用逗号连,完全不符合需求。
下面是修正后的代码,我会一步步解释:
# 输入文件用'r'只读模式打开,输出文件用'w'写入模式打开 with open('test_text.txt', 'r') as f_in, open('my_file_edit.txt', 'w') as f_out: # 读取所有内容,先把换行符去掉(兼容多行输入的情况) content = f_in.read().replace('\n', '') # 按逗号分割每个字段的定义,同时清理掉字段前后的空格 field_defs = [item.strip() for item in content.split(',') if item.strip()] # 提取每个字段定义里首个空格前的部分,就是我们要的字段名 field_names = [def_part.split(' ')[0] for def_part in field_defs] # 把所有字段名用空格连接成一行,写入输出文件 f_out.write(' '.join(field_names))
代码细节解释:
- 文件模式修正:
f_in用'r'确保可以读取输入内容,f_out用'w'确保可以写入结果(如果输出文件不存在会自动创建,存在则覆盖原有内容)。 - 内容预处理:把所有内容里的换行符去掉,避免多行输入时分割出无效的空字段;再按逗号分割成单个字段的定义,用
strip()清理每个字段前后的空格(比如原内容里逗号前后的冗余空格)。 - 字段名提取:对每个字段定义,按空格分割后取第一个元素,就是我们需要的字段名。
- 结果输出:把所有字段名用空格连接成一行,直接写入输出文件。
用你提供的输入内容测试:
FIELD1 INTEGER DEFAULT -99999 , FIELD2 VARCHAR(50) CHARACTER SET LATIN NOT CASESPECIFIC NOT NULL, FIELD3 INTEGER DEFAULT -99999 , FIELD4 INTEGER DEFAULT -99999 , FIELD5 INTEGER NOT NULL, FIELD6...
运行代码后,输出文件里的内容就是:
FIELD1 FIELD2 FIELD3 FIELD4 FIELD5 FIELD6
内容的提问来源于stack exchange,提问作者JD2775
相关产品推荐
相关产品推荐

