簡體   English   中英

如何在單元格中將txt文件轉換為csv文件

[英]How to convert a txt file to csv file in cells

我正在嘗試將txt文件轉換為以下格式:

NOTE
Date : 2/12/2019
Name : SomeName
Amount : 9000.0
Total : 59000.0
3ABA2363F5305877265757265784B2EB94ABxxxxxxxxxxxxxxxx

對於csv文件,省略NOTE並采用單元格格式:

Date,Name,Amount,Total,Signature
2/12/2019, SomeName,9000,59000,3ABA2363F5305877265757265784B2EB94ABxxxxxxxxxxxxxxxx

到目前為止,我存檔要做的是:

Date,Number,Amount,Total,Signature
['NOTE'],"['Date', '2/12/2019']","['Name', 'SomeName']","['Amount', '9000.0']","['Total', '59000.0']",['3ABA2363F5305877265757265784B2EB94ABxxxxxxxxxxxxxxxx']

這是我的代碼:

with open('example.txt', 'r') as in_file:
    stripped = [line.replace(":","").split() for line in in_file]
    zipped = zip([stripped]*1)
    with open('out_file.csv', 'w') as out_file:
        writer = csv.writer(out_file)
        writer.writerow(('Date', 'Number', 'Amount', 'Total', 'Signature'))
        for group in zipped:
            writer.writerows(group)

問題 :將txt文件轉換為單元格中的csv文件

使用csv.DictWriter示例。

import io, csv

TXT = """NOTE
Date : 2/12/2019
Name : SomeName
Amount : 9000.0
Total : 59000.0
3ABA2363F5305877265757265784B2EB94ABxxxxxxxxxxxxxxxx
NOTE
Date : 2/12/2019
Name : SomeName
Amount : 9000.0
Total : 59000.0
3ABA2363F5305877265757265784B2EB94ABxxxxxxxxxxxxxxxx
"""

with io.StringIO(TXT) as in_file,\
    io.StringIO() as out_file:

    fieldnames = ['Date', 'Name', 'Amount', 'Total', 'Signature']
    writer = csv.DictWriter(out_file, fieldnames=fieldnames)
    writer.writeheader()

    while True:
        data = {}
        for row in range(6):
            try:
                line = next(in_file)
                s = line.rstrip().split(':')

                if len(s) == 2:
                    data[s[0].strip()] = s[1].strip()
                else:
                    data['Signature'] = s[0]

            except StopIteration:
                break

        if data:
            writer.writerow(data)
        else:
            break

    print('{}'.format(out_file.getvalue()))

輸出

 Date,Name,Amount,Total,Signature 2/12/2019,SomeName,9000.0,59000.0,3ABA2363F5305877265757265784B2EB94ABxxxxxxxxxxxxxxxx 2/12/2019,SomeName,9000.0,59000.0,3ABA2363F5305877265757265784B2EB94ABxxxxxxxxxxxxxxxx 

格式如何更改? (就像可能發生的變化一樣)。


import csv
with open('inp', 'r') as in_file:
    dic = dict()
    a = []
    for line in in_file:
        a.append(line.replace(":","").split())

    a.pop(0) #NOTE
    last = a.pop().pop() #no key
    for i in a:
        dic[i[0]] = i[1]
    with open('out_file.csv', 'w') as out_file:
        writer = csv.writer(out_file)
        writer.writerow(dic.keys())
        toWrite = list(dic.values())
        toWrite.append(last)
        writer.writerow(toWrite)

要將“簽名”添加到第一行,您需要將dic.keys()更改為list並在dic.keys()附加一個字符串(例如,如果值帶有最后一項)

或像這樣:


import csv
with open('inp', 'r') as in_file:
    a = []
    for line in in_file:
        a.append(line.replace(":","").split())

    a.pop(0) #NOTE
    with open('out_file.csv', 'w') as out_file:
        writer = csv.writer(out_file)
        writer.writerow(('Date', 'Number', 'Amount', 'Total', 'Signature'))
        toWrite = []
        for i in a:
            toWrite.append(i.pop())
        writer.writerow(toWrite)

暫無
暫無

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

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