检查文件行是否以字符开头

时间:2018-11-23 20:52:59

标签: python python-3.x

我想用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”。

我们非常感谢您的帮助。

2 个答案:

答案 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