Python过滤文本

时间:2015-09-21 22:54:56

标签: python csv text filtering

你有这个文本文件,在字符“*******************************”之间分组信息,例如:

*******************************
15674B  2000
#12 DIVERSION
           800.000
COORDINATES
    0
FLOW DIRECTION
    0      
PROTECT DATA
    0      
DATUM
      0.00
RADIUS TYPE
    2
DIVIDE X-Section
0
SECTION ID

INTERPOLATED
    0
ANGLE
    0.00   0
RESISTANCE NUMBERS
   0  0     1.000     1.000     1.000    1.000    1.000
PROFILE        8
   -15.000    12.000     1.000     <#0>     0     0.000     0
     0.000    10.960     1.000     <#1>     0     0.000     0
     0.600    10.820     1.000     <#0>     0     0.000     0
     0.700    10.410     1.000     <#0>     0     0.000     0
     1.540     9.990     1.000     <#0>     0     0.000     0
     4.040     9.980     1.000     <#2>     0     0.000     0
     6.200    11.160     1.000     <#4>     0     0.000     0
    15.000    12.000     1.000     <#0>     0     0.000     0
LEVEL PARAMS
   0  0    0.000  0    0.000  20
*******************************
15674B  2000
#12 DIVERSION
           900.000

我要做的是在字符“***********************”下面提取第二行和第三行(#12 DIVERSION,800.00) ********“以及第24行-32行的PROFILE信息,并将它们保存到csv文件中。

我知道我可以使用python来读取文件,例如:

with open ("results.txt","r") as myResults:
    readFile = myResults.readlines()

但我的问题是我不知道如何识别字符之间的信息组“****************************** *“然后提取某些行。

非常感谢任何协助。

2 个答案:

答案 0 :(得分:1)

这可能会奏效:

lines_you_want = []

with open ("test.txt","r") as myResults:
    lines = myResults.readlines()
    indexes_of_lines_you_want = [] # We create a list for the indexes of the lines you want to extract

    for i in range(len(lines)):
        if '*******' in lines[i]: # We check if the current line is a line full of stars
            indexes_of_lines_you_want.extend([i+2, i+3]) # We add the indexes current_index+2 and current_index+3 to our list

    for i in indexes_of_lines_you_want:
        lines_you_want.append(lines[i])

之后你可以将列表lines_you_want中的行保存到这样的.csv文件中

import csv

myfile = open('result.csv', 'w', newline='')
writer = csv.writer(myfile)
writer.writerow(lines_you_want)

虽然你应该把import csv放在开头。

答案 1 :(得分:1)

如果文件不是太长(即你可以将整个文件读入内存),你可以尝试这样的事情:

with open("results.txt","r") as myResults:
    blocks = myResults.read() # put the whole file into a string

# split the string into blocks and process them independently
for block in blocks.split('*******************************')[1:]:
    lines = block.split('\n')
    print lines[1]
    print lines[2]
    for i in range(24, 33):
        print lines[i]