【发布时间】:2017-09-20 05:30:55
【问题描述】:
我正在开发一个 python 3.x 项目,该项目需要读取需要过滤的大型 TXT 文件(例如,删除多个空格、空行、以某些字符串开头的行等)并最终拆分通过正则表达式匹配。
我现在正在做的是使用 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
【问题讨论】:
-
txt 长什么样子?可以发 4-5 行吗?
-
我不知道你的数据有多大,但是我用超过30K的字幕文件多次尝试了字符串操作。其中一个文件平均为 10 KB。因此,总共有 30MB 数据。每次我在 python 中尝试时,都需要几秒钟。
-
@Vaishali 刚刚编辑了我的帖子以包含我的文本中的 sn-p。
-
您想要 13 - 0005761-52.2014.4.02.5101 和 2 - 0117333-76.2015.4.02.5101 之间的所有内容?
-
正是@Vaishali。虽然我仍然需要做一些过滤来删除一些额外的空格和空行。但本质上,这些参数(包括参数)之间的所有文本数据都是我需要放在 pandas 数据框中的一行。之后就可以进行过滤了。
标签: python regex python-3.x pandas dataframe