【发布时间】:2020-02-15 06:02:37
【问题描述】:
我有以下结构的数据:
[TimingPoints]
21082,410.958904109589,4,3,1,60,1,0
21082,-250,4,3,1,100,0,0
22725,-142.857142857143,4,3,1,100,0,0
23547,-166.666666666667,4,3,1,100,0,0
24369,-333.333333333335,4,3,1,100,0,0
27657,-200.000000000001,4,3,1,100,0,0
29301,-142.857142857143,4,3,1,100,0,0
30123,-166.666666666667,4,3,1,100,0,0
30945,-250,4,3,1,100,0,0
32588,-166.666666666667,4,3,1,100,0,0
34232,-250,4,3,1,100,0,0
35876,-142.857142857143,4,3,1,100,0,0
36698,-166.666666666667,4,3,1,100,0,0
37520,-250,4,3,1,100,0,0
42451,-142.857142857143,4,3,1,100,0,0
[HitObjects]
256,192,17794,12,0,20876,0:0:0:0:
159,96,21082,6,0,B|204:120|204:120|254:103|254:103|305:130|355:102,1,210
409,27,22725,2,0,P|446:96|405:179,1,171.499994766236
269,284,23547,2,0,B|317:250|324:193|324:193|328:220|350:236,1,146.999995513916
我想阅读列表中 [HitObjects] 之前 [TimingPoints] 下的所有行。 应该忽略空行。 所以最终列表应该包含:
21082,410.958904109589,4,3,1,60,1,0
21082,-250,4,3,1,100,0,0
22725,-142.857142857143,4,3,1,100,0,0
23547,-166.666666666667,4,3,1,100,0,0
24369,-333.333333333335,4,3,1,100,0,0
27657,-200.000000000001,4,3,1,100,0,0
29301,-142.857142857143,4,3,1,100,0,0
30123,-166.666666666667,4,3,1,100,0,0
30945,-250,4,3,1,100,0,0
32588,-166.666666666667,4,3,1,100,0,0
34232,-250,4,3,1,100,0,0
35876,-142.857142857143,4,3,1,100,0,0
36698,-166.666666666667,4,3,1,100,0,0
37520,-250,4,3,1,100,0,0
42451,-142.857142857143,4,3,1,100,0,0
我使用以下正则表达式模式进行了尝试:
\[TimingPoints\]((.|\n)*)\[HitObjects] 但它不会忽略空行。
如何匹配线条以获得上述内容?
另外,如何使用 python 加载列表中的所有匹配行?
【问题讨论】:
-
这是来自 CSV/纯文本文件吗?也许使用
with open(myfile.csv, 'r') as f: text = f.readlines()。然后,您可以使用条件语句删除列表中 HitObjects 之后的所有行。或者使用 Pandas 进行过滤... -
@S3DEV 它是一个纯文本文件。我真的必须手动手动删除所有空行吗?难道没有一个简单的正则表达式单行来进行相应的过滤并将行存储在一个列表中吗?
-
先获取文本,然后删除空行。空行通常表示
\n\n,您可以将其替换为\n-text = text.replace('\n\n', '\n')