2017-12-20 10 views
0

私は、PythonでシートをExcelに変換するためにテキストファイルを変換しようとしています。ノーREG、郵便番号、LOCのID、EMPのID、姓、名:txtファイルは、以下のPythonの変換をExcelのTxtファイル

Sample data

列名formart指定されたデータが含まれています。各レコードには1つ以上のエラー番号があります。各レコードの列名は、値の上にリストされています。 reg no、firstname、lastname、およびerrorsを各レコードの別々の行に記載したExcelシートを作成したいと思います。

どのようにレコードをExcelシートに入れることができますか?正規表現を使用すべきですか?そして、対応するレコードの異なる行にエラー番号を挿入するにはどうすればよいですか?

予想される出力: https://github.com/trEaSRE124/Text_Excel_python/blob/master/new.txt

任意のコードスニペットや提案が親切に感謝している。ここで

enter image description here

は、入力ファイルへのリンクです。

+0

ファイルから入力してデータフレームを作成します。次に、以下の手順に従ってください:https://www.datacamp.com/community/tutorials/python-excel-tutorial –

+0

こんにちは@GaneshKデータフレームの作成について、より具体的に教えてください。すべてのコードスニペットが役立ちます。 – Katherine

+0

'entry1:[{'REG NO':203}、{'ZIP CODE':1234} ... ]'のように入力を変換することができます。これは、基本的には、値にする列名を指定したリストです。次に:http://pbpython.com/pandas-list-dict.html –

答えて

1

あなたはスプレッドシートに直接アイテムを堆積させることのできるopenpyxlライブラリを使用してこれを行うことができます。まだ必要

出力がどのように見える場合、私はそれを修正することができます。このコードは、あなたの特定の状況のた​​めにそれを行う方法を示しています。

NEW_PERSON, ERROR_LINE = 1,2 
def Line_items(): 
    with open('katherine.txt') as katherine: 
     for line in katherine: 
      line = line.strip() 
      if not line: 
       continue 
      items = line.split() 
      if items[0].isnumeric(): 
       yield NEW_PERSON, items 
      elif items[:2] == ['ERROR', 'NUM']: 
       yield ERROR_LINE, line 
      else: 
       continue 

from openpyxl import Workbook 
wb = Workbook() 
ws = wb.active 

ws['A2'] = 'REG NO' 
ws['B2'] = 'LASTNAME' 
ws['C2'] = 'FIRSTNAME' 
ws['D2'] = 'ERROR' 

row = 2 
for kind, data in Line_items(): 
    if kind == NEW_PERSON: 
     row += 2 
     ws['A{:d}'.format(row)] = int(data[0]) 
     ws['B{:d}'.format(row)] = data[-2] 
     ws['C{:d}'.format(row)] = data[-1] 
     first = True 
    else: 
     if first: 
      first = False 
     else: 
      row += 1 
     ws['D{:d}'.format(row)] = data 

wb.save(filename='katherine.xlsx') 

結果の画面スナップショットです。

spreadsheet

+1

ありがとうトン先生!これは私のために働き、openpyxlライブラリについて知りたければ – Katherine

+0

あなたは大歓迎です! openpyxlは素敵な商品です。 –

2

ここにドラフトコードがあります。変更が必要な場合はお知らせください:

# import pandas as pd 
from collections import OrderedDict 
from datetime import date 
import csv 

with open('in.txt') as f: 
    with open('out.csv', 'wb') as csvfile: 
     spamwriter = csv.writer(csvfile, delimiter=',', quoting=csv.QUOTE_MINIMAL) 
     #Remove inital clutter 
     while("INPUT DATA" not in f.readline()): 
      continue 

     header = ["REG NO", "ZIP CODE", "LOC ID", "EMP ID", "LASTNAME", "FIRSTNAME", "ERROR"]; data = list(); errors = list() 
     spamwriter.writerow(header) 
     print header 

     while(True): 
      line = f.readline() 
      errors = list() 
      if("END" in line): 
       exit() 
      try: 
       int(line.split()[0]) 
       data = line.strip().split() 
       f.readline() # get rid of \n 
       line = f.readline() 
       while("ERROR" in line): 
        errors.append(line.strip()) 
        line = f.readline() 
       spamwriter.writerow(data + errors) 
       spamwriter.flush() 
      except: 
       continue 


     # while(True): 
      # line = f.readline() 

python-2を使用して実行してください。エラーは後続の列として追加されます。それはあなたがそれを望むように少し複雑です。 enter image description here

+0

遅れて申し訳ありません。私は試験を受けた –

+0

最初の部分はスキップできます。私はデータセットがあなたがアップロードしたときになると仮定しました。 –

+0

私はあなたのプログラムを実行しようとしましたが、プログラムを実行するのにずっと時間がかかり、出力ファイルにデータを書き込んでいません。私はPython 2でjupyterノートブックを使用しています。 – Katherine

関連する問題