首页 > 解决方案 > 使用python拆分行并将分隔符添加到文本文件

问题描述

我正在为 NLP 分析清理一个凌乱的 .txt 文件(文本 ID 和原始文本)。

目前它看起来像:

@@0001 words 83 words, 90, words, 8989! @@0002 words, 98 words; words. @@0003 words 30 words ....

我想把它变成一个干净的 .txt 或 .csv 格式,每个文本都在自己的行上,ID 与文本用分隔符分隔。

ID   | text 
0001 | words 83 words, 90, words, 8989!
0002 | words, 98 words; words. 
0003 | words 30 words ....

以下代码创建一个 .txt 文件,其中每个文本都在其自己的行中:

with open('/file_directory/file.txt', 'r') as file, open('/file_directory/file_cleaned.txt', 'w') as file2:
    for line in file:
        for word in line.split('@@'):
           file2.write(word + '\n') 

例如,

0001 words 83 words, 90, words, 8989!
0002 words, 98 words; words. 
0003 words 30 words ....

但是,我无法弄清楚如何添加分隔符,因为我无法匹配特定的整数系列或整数长度(例如,4+ 位)。目前,我正在尝试首先通过正则表达式添加分隔符,然后拆分行,但我遇到了正则表达式和文件写入问题。

import re
with open('/filedirectory/file.txt', 'r') as file, open('/filedirectory/file_cleaned.txt', 'w') as file2:
    text = file1.readlines()
    for line in text:
        text.re.split('^@\d{4,7}')
        for word in line.split('@@'):
           file2.write(word + '\n') 

我得到错误:

AttributeError: 'list' object has no attribute 're'

任何想法将不胜感激。谢谢!

标签: pythonregexdata-cleaning

解决方案


list没错,对象没有属性是不言而喻的re

您可以使用

with open('/file_directory/file.txt', 'r') as file, open('/file_directory/file_cleaned.txt', 'w') as file2:
    file2.write(re.sub(r'@@\d+', r'\n\g<0> | ', file.read()).lstrip()) 

正则表达式匹配@@一个或多个数字,并将匹配替换为换行符、整个匹配值和|用单个空格括起来的字符。

请参阅Python 演示

import re
s = "@@0001 words 83 words, 90, words, 8989! @@0002 words, 98 words; words. @@0003 words 30 words ...."
print( re.sub(r'(@@\d+)', r'\n\1 | ', s).lstrip() )

输出:

@@0001 |  words 83 words, 90, words, 8989! 
@@0002 |  words, 98 words; words. 
@@0003 |  words 30 words ....

推荐阅读