python - 解析具有随机间距和重复文本的文本文件?

标签 python

我正在尝试解析一个具有不一致间距和重复行的大型文本文件。文件中的很多文本我不需要,但例如在一行中我可能需要 6 个项目,有些用逗号分隔,有些用空格分隔。

示例行:1 23456 John,Doe 366: F.7

我想要的(CSV格式):1 2456 John Doe 366 F.7(全部作为他们自己的单元格)

最终,我试图将输出获取到 CSV,并且希望我已经尝试在文件中逐行进行到目前为止,将我试图按其特定空间提取的组件分开,但我觉得有一个更好的方法。

import csv

def is_page_header(line):
    return(line[0] == '1') and ("RUN DATE:" not in line)

def read_header(inFile):
    while True:
        line = inFile.readline()
        if '************************' in line:
            break

def is_rec_start(line):
    try:
        x = int(line[0:6])
        return True
    except:
        return False

filename = r"TEXT_TEST.txt"

inFile = open(filename)

while True:
    line = inFile.readline()    

    if line == "\n":
        continue
    elif line == "":
        break
    elif is_page_header(line):
        read_header(inFile)
    elif is_rec_start(line):
          docketno = int(line[0:6])
          fileno = line[8:20]
    elif 'FINGERPRINTED' in line:
        fingerprinted = True
    else:
        print(line)

最佳答案

您可以使用正则表达式

import re
import csv
pattern = re.compile("(\d+)\s+(\d+)\s*(\w+)\s*\,\s*(\w+)\s*(\d+)\s*\:\s*([\w\.]+)")
with open("TEXT_TEST.txt") as txt_file, open("CSV_TEST.csv", "w") as csv_file:
    csv_writer = csv.writer(csv_file)
    for line in txt_file:
        g = pattern.findall(line)
        if g: csv_writer.writerows(g)

(\d+) :\d匹配从 0 到 9 的任意数字,+ after 表示匹配一个或多个,()用于捕获和提取信息以进行进一步处理。

\s+ :\s匹配空白,+一个或多个。

\s* :*之后\s匹配零个或多个空格。

\w : 用于匹配 A-Z 范围内的字符, a-z , 0-9

[]用于匹配特定字符,例如。 [abc]只会匹配单个 a , b ,或c信,没有别的,所以[\w\.]匹配A-Z , a-z , 0-9. , \之前.用于转义正则表达式中具有特殊含义的字符。

\d \w \s * + . [] () re.findall

关于python - 解析具有随机间距和重复文本的文本文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59142331/

相关文章:

python - 如何通过 Restful 服务调用进行单点登录 (SSO)

python - 如何在 FastAPI 中为 Pydantic 模型编写测试?

python - OpenPyXL - 页眉/页脚 - 无法将页眉写入工作表

python - 如何防止权重和偏差保存最佳模型参数

python - 将包含罗马数字的字符串转换为等效的整数

python - 返回列表元素和索引

python - 如何在虚拟环境中添加到pythonpath

Python:在 seaborn 中为一维群图着色

Python 2.7 类属性奇怪的行为

python - 将 FastAPI 服务器与 Celery Workers 服务器分开 - 目录结构