簡體   English   中英

將復雜的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 (表格)。 每個文件有 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM