我想用Python读取一些包含我需要的某些数据的文件。
文件的结构如下:
NAME:a280
评论:钻探问题(路德维希)
TYPE:TSP
尺寸:280
EDGE_WEIGHT_TYPE:EUC_2D
NODE_COORD_SECTION
1 288 149
2 288 129
3 270 133
4 256 141
5 256 157
6 246 157
7 236 169
8 228 169
9 228 161
因此,文件从包含我需要的数据的几行开始,然后有一些我不需要的随机行,然后有一些我需要数字数据的行。我读了所有需要阅读的东西,一切都很好。
但是,我的问题是我无法找到一种方法来绕过夹在所需数据之间的随机行数。文件之间的行可以是1、2或更多。对其中的一些f.readline()
命令进行硬编码以绕过它是很愚蠢的。
我想到了一些正则表达式来检查行是否以字符串开头,以绕过它,但是我失败了。
换句话说,我的数据中可以有更多不需要的行,例如“ NODE_COORD_SECTION”。
我们非常感谢您的帮助。
答案 0 :(得分:0)
好吧,您可以简单地检查每一行是否有效(您需要的东西),如果无效,则只需跳过即可。例如:
line_list = line.split()
if line_list[0] not in ['NAME', 'COMMENT', 'TYPE', ...]:
break
if len(line_list) != 3:
break
if len(line_list) == 3 and (type(line_list[0]) != int or type(line_list[1]) != int or type(line_list[2]) != int):
break
答案 1 :(得分:0)
如果您在“文件行”中添加了某种格式,并且显示了一些代码,那将是很好的选择,但是我会尝试使用她。
我首先定义一个包含有效行指示的字符串列表,然后将当前行拆分为字符串列表,并检查第一个元素是否对应于有效字符串列表中的任何元素。
如果第一个字符串与有效字符串列表中的任何字符串都不对应,我将检查第一个元素是否为整数,依此类推...
current_line = 'LINE OF TEXT FROM FILE'
VALID_WORDS = ['VALID_STR1','VALID_STR2','VALID_STR3']
elems = current_line.split(' ')
valid_line = False
if elems[0] in VALID_WORDS:
# If the first str is in the list of valid words,
# continue...
valid_line = True
else if len(elems)==3:
# If it's not in the list of valid words BUT has 3
# elements, check if it's and int
try:
valid_line = isinstance(int(elems[0]),int)
except Exception as e:
valid_line = False
if valid_line:
# Your thing
pass
else:
# Not a valid line
continue