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

2024-10-01 07:27:18 发布

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

我有一个.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(表)。 每个文件中有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实现这一点?谢谢


Tags: 文件csvkeynamecoretimeversionsoftware
1条回答
网友
1楼 · 发布于 2024-10-01 07:27:18

您当前的示例显示,所有值似乎都遵循相同的格式,即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

相关问题 更多 >