将复杂的 txt 转换为 csv python 脚本

Convert complex txt to csv python script

我有一个 .txt 文件,里面有这个

Name: 321; 
Score:100; Used Time: 1:09:308;
GTime: 6/28/2024 10:04:18 PM;
Core Version : 21.0.0.0;
Software Version : 21.0.0.0;
AppID: 0S0; MapDispName: Future City; MapName:MapName MapName MapName;
Key:A0000-abcde-Q0000-F0000-00H00;  REG Date : 2/27/2021 1:16:34 PM; Expiry : 7/7/2024 12:00:00 AM

我想做的是使用 python 脚本将该文本转换为 .csv (table)。 300个文件,每个文件几百行。我们只需要将前7行的信息转化为csv即可。所有这 300 个文件都具有相同的格式,但具有不同的值。

我希望 log.csv 文件显示的是:

Name,Sore,Time,Software Ver,Core Ver,AppID,Key,REG Date,Expiry,MapName
321,100,69.308s,21.0.0.0,21.0.0.0,0S0,A0000-abcde-Q0000-F0000-00H00,2/27/2021 1:16:34 PM,7/7/2024 12:00:00 AM,MapName MapName MapName

我如何用 python 做到这一点?谢谢。

您当前的示例表明所有值似乎都遵循相同的格式,即 Key:Value;

使用glob.glob() 遍历所有文本文件名。您可以使用 islice() 正好读入 7 行,然后将它们转换为一行。然后可以在 ; 上拆分,为您提供键值对列表。然后可以在 :strip() 上进一步拆分,以删除任何多余的空格。

最后使用 itemgetter() 从结果列表中仅提取您需要的元素。

from itertools import islice, chain
from operator import itemgetter
import csv
import glob
import os

get = itemgetter(1, 3, 5, 9, 11, 13, 19, 21, 23, 17)

with open('log.csv', 'w', newline='') as f_output:
    csv_output = csv.writer(f_output)
    csv_output.writerow('Name,Sore,Time,Software Ver,Core Ver,AppID,Key,REG Date,Expiry,Filename'.split(','))

    for filename in glob.glob('*.txt', recursive=True):
        with open(filename) as f_input:
            data = ''.join(islice(f_input, 0, 7)).replace('\n', '').split(';')
            values = [v.strip() for v in chain.from_iterable(d.split(':', 1) for d in data)]
            csv_output.writerow([*get(values), os.path.basename(filename)])

对于您的示例,这会给您 log.csv 包含:

Name,Sore,Time,Software Ver,Core Ver,AppID,Key,REG Date,Expiry,Filename
321,100,1:09:308,21.0.0.0,21.0.0.0,0S0,A0000-abcde-Q0000-F0000-00H00,2/27/2021 1:16:34 PM,7/7/2024 12:00:00 AM,MapName MapName MapName,file1.txt