2016-07-18 6 views
3

私はin.txtからデータを読み込み、それから特定の行をSample.xlsxに書き込んでいます。 startendを含む行の間でデータをグロッピングしています。入力データのこのセクションを解析するときにFlagを設定しました。 Flagが設定されている場合、NAMEが含まれ、次の行にはAGEが含まれ、その後に空白行が含まれています(補足情報:入力ファイルのパターンは次のとおりです)、行内にNAME:AGE:が出現するたびに、このパターンが繰り返される)。xlsxに書き込むと、1つのセルに重複した行が作成される

start is here 
NAME:Abe 
AGE:40 

NAME:John 
AGE:20 

... 
end 

入力は上記と同様です。今問題は、私は約1000本のこのような線があることです。したがって、おおよそ333名、時代です。コードを実行した後にExcelシートを開くと、C2はNAME:Abeが21回繰り返されていることがわかります。 D2はAGE:40も21回繰り返されています。私は入力を100行に減らし、繰り返しは3に減らしました。なぜこれが起こっているのか分かりません。私が10行、すなわち3つの名前と年齢に変更すると、この問題は起こりません。 C2には1つの名前があり、C3には1つの名前があります。

長い書込みについてお詫び申し上げます。しかし、私がここで間違っていることを教えてください。

読んでいただきありがとうございます。

______________________________________編集-1 ________________________________

私は、次の最小限のコードを用いて細胞を得意とするテキストファイルから基本的な書き込みを試してみました。

for line in fin: 
    ws['C'+str(i)] = line 
    i += 1 

これも同じエラーを生成します。行はセル内で複数回書き込まれます。入力テキストファイルの行数に基づいて繰り返し回数が増えます。

__________________________________編集-2

__________________________________私は問題を修正しているように見えるが、それは固定しまった理由はまだ分かりません。文字列は問題なく印刷されていたので、最後の文字はlinesから削除しました。これは次の文字でなければなりません。そして今はすべてが期待どおりに機能しています。私はこれが適切な解決策であるのか、なぜこれが起こっているのかは分かりません。とにかく、以下のコードはこの問題を解決するようです。

for line in fin: 
    ws['C'+str(i)] = line[:-1] 
    i += 1 
+0

あなたのカウンターに問題があると思われます。デバッグコードを追加して、必要に応じて動作するかどうかを確認する必要があります。 –

+0

私もそう思った。しかし、ws ['C' + str(i)] = linesを 'ws ['C' + str(i)] = 'hello' 'に変更し、同様にD列に対して変更しました。 ''は1つのセルに1回のみ表示されます。問題は、現在の 'lines'をそのセルに割り当てるときに起こります。それはちょうど複数回繰り返されます。 – akhilc

+0

また、同じ条件文の下でテキストファイルにも名前と年齢を書いています。また、テキストファイルの出力には繰り返しはありません。 – akhilc

答えて

1

Pythonでカウンタを使用することはお勧めできません。次のコードは、より表現力豊かで保守的です。

from openpyxl import Workbook, load_workbook 
fin = open('in.txt', 'r') 

wb = Workbook() 
ws = wb.active 
ws.append([None, None, "NAME", "AGE"]) 

Flag = False 
for line in fin.readlines(): 

    if line.startswith("start"): 
     Flag = True 
     row = [None, None, None, None] 

    elif line.startswith("end"): 
     break 

    elif Flag: 
     if line.startswith('NAME:'): 
      row[2] = line[5:] 

     elif line.startswith('AGE:'): 
      row[3] = int(line[4:]) 
      ws.append(row) 

wb.save(filename = 'Sample.xlsx') 
fin.close() 
関連する問題