<p><strong>您可以解析csv文件并提取最后三个字段:</strong></p>
<pre><code>import io
import pandas as pd
csv = """
id;name;desc;hist
1;Fulano;A;action: Test1\ndate: 04/10/2021 09:00:00\n\naction: Test2\ndate: 04/10/2021 09:00:00\n\naction: Test3\ndate: 04/10/2021 09:00:00\nauto: TESTE\n\n
2;Ciclano;B;action: Test1\ndate: 03/02/2021 14:23:24\n\naction: Test2\ndate: 03/02/2021 14:23:24\n\naction: Test3\ndate: 03/02/2021 14:23:24\nauto: TESTE\n\n
3;Beltrano;C;action: Test3\ndate: 04/10/2021 09:00:00\nauto: TESTE\n\n
"""
header = 'id,name,desc,action,date,auto'
new_csv = [header]
with io.StringIO(csv) as ftx:
lines = ftx.readlines()
first_row = None
for index, line in enumerate(lines):
if 'id;name;desc;hist' in line:
first_row = index + 1
break
if first_row:
index = first_row
end = len(lines)
while index < end:
if ';' in lines[index]:
col_id, col_name, col_desc, hist = lines[index].split(';')
parse = hist.split(': ')
action, date, auto = ['', '', '']
while True:
if parse[0].strip() == 'action':
action = parse[1].strip()
elif parse[0].strip() == 'date':
date = parse[1].strip()
elif parse[0].strip() == 'auto':
auto = parse[1].strip()
index += 1
if index >= end:
new_csv.append(','.join([col_id, col_name, col_desc, action, date, auto]))
break
if lines[index].strip() == '':
new_csv.append(','.join([col_id, col_name, col_desc, action, date, auto]))
index += 1
if index >= end or lines[index].strip() == '':
index += 1
break
parse = lines[index].split(': ')
new_csv = '\n'.join(new_csv)
df = pd.read_csv(io.StringIO(new_csv), parse_dates=['date'], keep_default_na=False)
df
id name desc action date auto
0 1 Fulano A Test1 2021-04-10 09:00:00
1 1 Fulano A Test2 2021-04-10 09:00:00
2 1 Fulano A Test3 2021-04-10 09:00:00 TESTE
3 2 Ciclano B Test1 2021-03-02 14:23:24
4 2 Ciclano B Test2 2021-03-02 14:23:24
5 2 Ciclano B Test3 2021-03-02 14:23:24 TESTE
6 3 Beltrano C Test3 2021-04-10 09:00:00 TESTE
</code></pre>