我有一组用空格分隔的分栏数据

Lorem ipsum dolor sit amet, consectetur adipiscing elit

需要的是将其读为CSV,由空格分隔,但只有5个第一列要在其中,文本的其余部分应该是单列,类似如下

|Lorem|ipsum|dolor|sit|amet,|consectetur adipiscing elit|

最后一列应该包含前5个以外的任何内容,因此单词和空格的数量是可变的

把它读成CSV是没有问题的,每字一栏.

但我在将可变字数尾数转换为单列时遇到了一些困难.

如有任何帮助,不胜感激.

我确实逐行阅读了它,并将其解析并插入到Pandas df中,但这很慢.因此,任何带有Read_csv()或类似内容的代码都会很好.

基本上,日志(log)文件

|ID|Datetime|Level|Recovered|Place|Message

 1  20230102 WARN  Yes       func1 Something wrong
 2  20230103 ERROR No        func2 Something really bad

推荐答案

我也会使用read_csv,但带有regex separator:

import io
​
s = "Lorem ipsum dolor sit amet, consectetur adipiscing elit"
​
df = pd.read_csv(io.StringIO(s), sep=r"\s(?=[^,]*,)|,\s", engine="python")
​

​输出:

print(df.columns)

Index(['Lorem', 'ipsum', 'dolor', 'sit', 'amet', 'consectetur adipiscing elit'], 
        dtype='object')

[Regex demo]

100:

有趣的是,您可以使用此正则表达式方法来定位前五个空格:

import csv

with open("input.csv") as csvfile:
    col_names = next(csv.reader(csvfile, delimiter="|"))
    df = pd.read_csv("input.csv", sep=r"(\S+)\s+(\S+)\s+(\S+)\s+(\S+)\s+(\S+)|\|",
                     engine="python").dropna(axis=1).set_axis(col_names, axis=1)

否则,使用split:

with open("input.csv") as csvfile:
    col_names = next(csv.reader(csvfile, delimiter="|"))
    df = (pd.read_csv("input.csv", header=None, skiprows=1)
              [0].str.split(r"\b\s+", n=5, expand=True)
              .set_axis(col_names, axis=1)

发帖主题:Re:Kolibrios

   ID  Datetime  Level Recovered  Place               Message
0   1  20230102   WARN       Yes  func1       Something wrong
1   2  20230103  ERROR        No  func2  Something really bad

Python相关问答推荐

使用regex分析具有特定字符的字符串(如果它们存在)

如何在Deliveryter笔记本中从同步上下文正确地安排和等待Delivercio代码中的结果?

Python daskValue错误:无法识别的区块管理器dask -必须是以下之一:[]

未删除映射表的行

加速Python循环

用NumPy优化a[i] = a[i-1]*b[i] + c[i]的迭代计算

numpy卷积与有效

如果值发生变化,则列上的极性累积和

根据列值添加时区

Python脚本使用蓝牙运行在Windows 11与raspberry pi4

使用Python从URL下载Excel文件

Django—cte给出:QuerySet对象没有属性with_cte''''

Geopandas未返回正确的缓冲区(单位:米)

寻找Regex模式返回与我当前函数类似的结果

在Admin中显示从ManyToMany通过模型的筛选结果

在Docker容器(Alpine)上运行的Python应用程序中读取. accdb数据库

Python类型提示:对于一个可以迭代的变量,我应该使用什么?

按条件添加小计列

Python日志(log)库如何有效地获取lineno和funcName?

Pythonquests.get(Url)返回Colab中的空内容