繁体   English   中英

Python数据框-提取正则表达式匹配项之间的多行

[英]Python Dataframe - Extract multiple lines between regex match

我正在处理一个python 3.x项目,该项目需要读取需要过滤的大TXT文件(例如,删除多个空格,空行,以某些字符串开头的行等),最后通过REGEX匹配进行拆分。

我现在正在做的是使用pandas数据框存储每一行​​(这使得使用pandas startswith()或endswith()可以轻松删除行)。 另一方面,通过使文本文件的每一行与DataFrame中的一行相对应,我无法弄清楚如何在REGEX匹配项之间提取数据。 这是一个例子:

| 0 | REGEX MATCH   |
| 1 | data          |
| 2 | data          |
| 3 | REGEX MATCH   |
| 4 | data          |
| 5 | REGEX MATCH   |

所以问题是如何在匹配之间提取数据(在此示例中,行0到2;行3到4和5)。 熊猫有可能吗?

另一种选择是使用文本文件中的read()并进行DataFrame的常规字符串操作,过滤,拆分等操作,我不确定这是否适合于大文本文件。 在那种情况下,我在REGEX匹配之间有不需要的数据。 例:

str = "This is REGEX_MATCH    while between another \n \n\ REGEX_MATCH there is some    unwanted data"

在上面,我需要删除多余的空格\\ n,最后使用REGEX拆分匹配项。 唯一的问题是我的源文本文件确实很大。

Pandas的删除/过滤速度很快,而常规字符串的分割更容易。

有任何想法吗?

谢谢!

编辑。 这是我的原始文本的样子。 如您所见,这是一团糟(摘自PDF)。 每行是pandas数据框中的一行。 问题是,是否有可能提取那些包含一系列数字的行之间的所有数据(包括那些行)。

13 - 0005761-52.2014.4.02.5101                 Lorem ipsum dolor sit amet.
Quisque eget velit a orci consectetur pharetra. Aliquam.
\n
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
a
Lorem ipsum dolor sit amet.
        Lorem ipsum dolor sit amet - Sed ut tempus neque.
Sed ut tempus neque.
2 - 0117333-76.2015.4.02.5101 Lorem ipsum dolor sit amet

您可以使用并将其全部读取到DataFrame中,然后选择不包含匹配项的行:

import pandas as pd

df = pd.read_csv('test.txt', header=None, delimiter='|') 
df = df[df[2].str.contains('MATCH') == False]  # check column 2 from the example

或者,你可以找到你想要忽略然后使用该行skiprows论据pandas.read_csv

with open('test.txt') as f:
    lines = f.readlines()

skiprows = [i for i, line in enumerate(lines) if 'MATCH' in line]
df = pd.read_csv('test.txt', skiprows=skiprows, header=None, delimiter='|')

如果不需要或为空,请按列号删除列:

df = df.drop(df.columns[[0, 1, 3]], axis=1)

要清除列2中所有值中的多余空格:

df[2] = [' '.join(x.split()) for x in df[2]]  

或在整个DataFrame上清除空白:

cleaner = lambda x: ' '.join(x.split()) if isinstance(x, str) else x
df = df.applymap(cleaner)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM