Python解析没有分隔符和动态宽度值的文本文件

2024-06-16 13:03:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我的目标是用Python解析一个文本文件,该文件没有标题,因此没有列名称和分隔符。原始文件的示例如下所示:

Apr 14, 2021 12:40:00 AM CEST INFO   [purge.PurgeManager run] PURGE: Atom purge all data beginning (1 threads)
Apr 14, 2021 1:40:00 AM CEST INFO    [purge.PurgeManager run] PURGE: Atom purge all data beginning (1 threads)
Apr 14, 2021 2:40:00 AM CEST INFO    [purge.PurgeManager run] PURGE: Atom purge all data beginning (1 threads)

我试图将该文件导入Excel文件,但由于它没有分隔符,也没有固定的宽度,因此该行的每个值都包装在一个单元格(单元格A)中

现在,由于文件不是固定宽度或分隔的,如何从每行中提取日期(如您所见,这是动态宽度-行1长度Apr 14, 2021 12:40:00 AM CEST INFO>;行2长度Apr 14, 2021 1:40:00 AM CEST INFO)?除此之外,我对操纵其他列的值没有兴趣

我已经尝试将panda库与read_csv()read_fwf()一起使用,并且:

  1. 它使用read_csv()返回一个数据帧,其中有两列:列[0]-索引和列[1]-值(日期和其余部分)包装到一个列单元格中
  2. 使用read_fwf():不能完全使用它,因为日期的宽度是动态的

有没有办法用Python实现这一点?谢谢


Tags: 文件runinforeaddata宽度allam
2条回答
from datetime import datetime
date = []
with open("file.txt") as f:
    lines = f.readlines()
    for line in lines:
        date.append(datetime.strptime(line[:24].strip(), '%b %d, %Y %H:%M:%S %p'))
df = pd.DataFrame({"date":date})
df

enter image description here

您可以逐行读取文件并使用str.split()对其进行解析:

import dateutil
import pandas as pd

data = []
with open("your_file.txt", "r") as f_in:
    for line in map(str.strip, f_in):
        if not line:
            continue
        line = line.split(maxsplit=6)
        date = " ".join(line[:6])
        status = line[-1].split(maxsplit=1)[0]
        rest = line[-1].split(maxsplit=1)[-1]
        data.append({"date": date, "status": status, "rest": rest})


tzmapping = {
    "CET": dateutil.tz.gettz("Europe/Berlin"),
    "CEST": dateutil.tz.gettz("Europe/Berlin"),
}

df = pd.DataFrame(data)
df["date"] = df["date"].apply(dateutil.parser.parse, tzinfos=tzmapping)
print(df)

印刷品:

                       date status                                               rest
0 2021-04-14 00:40:00+02:00   INFO  [purge.PurgeManager run] PURGE: Atom purge all...
1 2021-04-14 01:40:00+02:00   INFO  [purge.PurgeManager run] PURGE: Atom purge all...
2 2021-04-14 02:40:00+02:00   INFO  [purge.PurgeManager run] PURGE: Atom purge all...

相关问题 更多 >