Python多个正则表达式清理文件

标签 python regex removing-whitespace

前言

我已经有一段时间没有使用 python 了,所以我在数据清理方面遇到了问题。 在 Notepad++ 中,它运行得非常慢,所以我正在寻找Python中更有效的选项。

我需要什么

我需要清理一个目录中的 100 多个文件,所有这些文件都是从 SAP 手动提取的。

我正在寻找的步骤:

  1. 删除第一行 -----
  2. 删除第三行 -----
  3. 删除每行的第一个和最后一个字符|
  4. 删除需要的空白 - 我需要保留文本之间的空白

原始文件

---------------------------------------------------------------------------
|  MANDT|BUKRS|NETWR     |UMSKS|UMSKZ|AUGDT     |AUGBL|ZUONR              |
---------------------------------------------------------------------------
|  100  |1000 |23.321-   |     |     |          |     |TEXT I WANT TO KEEP|
|  100  |1000 |0.12      |     |     |          |     |TEXT I WANT TO KEEP|
|  100  |1500 |90        |     |     |          |     |TEXT I WANT TO KEEP|
---------------------------------------------------------------------------

预期结果

MANDT|BUKRS|NETWR|UMSKS|UMSKZ|AUGDT|AUGBL|ZUONR
100|1000|23.321-|||||TEXT I WANT TO KEEP
100|1000|0.12|||||TEXT I WANT TO KEEP
100|1500|90|||||TEXT I WANT TO KEEP
<小时/>

代码here是我正在尝试处理的问题,但我需要正则表达式组合方面的帮助。在 Notepad++ 中,我可以使用 \h+(\w+)\h+ 并替换 \1 但在这里它不起作用。请帮助我构建一个正确的正则表达式。

最佳答案

两种方法:

-- 使用内置 str 对象函数:

with open('yourfile.txt', 'r') as f:
    lines = f.read().splitlines()     # getting list of lines
    for l in lines:
        if not l.startswith('---'):   # skip dashed lines
            print('|'.join(map(str.strip, l.strip('|').split('|'))))
<小时/>

--使用re.sub()函数:

with open('yourfile.txt', 'r') as f:
    lines = f.read().splitlines()
    for l in lines:
        if not l.startswith('---'):
            print(re.sub(r'\|\s*|\s*\|', '|', l).strip('|'))
            # an auxiliary pattern for complex cases:
            # re.sub(r'\|\s*(\S*)\s*(?=\|)', '|\\1', l).strip('|')
<小时/>

输出:

MANDT|BUKRS|NETWR|UMSKS|UMSKZ|AUGDT|AUGBL|ZUONR
100|1000|23.321-|||||TEXT I WANT TO KEEP
100|1000|0.12|||||TEXT I WANT TO KEEP
100|1500|90|||||TEXT I WANT TO KEEP
<小时/>

读/写模式:

要使用新内容覆盖当前文件,请使用以下方法:

with open('yourfile.txt', 'r+') as f:   # 'r+' - read/write mode
    lines = f.read().splitlines()
    f.seek(0)      # reset file pointer
    f.truncate()   # truncating file contents
    for l in lines:
        if not l.startswith('---'):
            # or f.write('|'.join(map(str.strip, l.strip('|').split('|'))) + '\n')
            f.write(re.sub(r'\|\s*|\s*\|', '|', l).strip('|') + '\n')

关于Python多个正则表达式清理文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46060337/

相关文章:

html - 我该如何解决这个定位?

python - 如何在Python列表中使用正则表达式

javascript - 删除 jQuery 文本中 <> 之间的所有内容

javascript - 正则表达式有问题,仅在 JavaScript 中?

Python 类/总是返回 0

java - 删除 xml 文件的缩进

git 在提交之前删除新文件中的尾随空格

python - Zip 函数未显示已抓取数据的完整列表

python - 为什么发送字符串并关闭套接字后会有 TCP RST 数据包

python - 将 pandas._libs.tslibs.timestamps.Timestamp 转换为日期时间