2017-10-03 7 views
0

私は3つの質問をして、それらの3つの回答のリストを持つ.csvファイルを作る小さなPythonスクリプトが必要です(それらのうちの1つはすべての行で同じです)、少し複雑です説明するのが、そこ例ですので、簡単には一例で見て:Pythonリストはすべてのエントリを複製します

What fruit do you want to purchase ? 
- Apples 
What color ? 
- Red 
How many? 
- 10 
What color ? 
- Green 
How many? 
- 30 

そして、結果ファイルが持っている必要があります。

#!/usr/bin/python 
# -*- coding: utf-8 -*- 
dataDir = 'Data/Orders/' 
class NewOrders: 
    def Create(self): 
     orderNum = str(raw_input('Introduce order reference: ')) 
     orderName = 'ORDERS'+orderNum+'.csv' 
     fruitType = str(raw_input('What fruit do you want to purchase: ')) 
     order = open(dataDir+orderName,'wb') 
     order.write('Fruit;Color;Qty\n') 
     fruitList=[] 
     while 1: 
      fruitColor=raw_input('What color: ') 
      fruitNumber=raw_input('How many: ') 
      if fruitColor=='': 
       break 
      fruitList.append(fruitColor+';'+fruitNumber+';'+fruitType) 
      for article in fruitList: 
       order.write('%s\n' % article) 
Orders = NewOrders() 
Orders.Create() 
:私はほとんどこのコードでそれをやった

Fruit;Color;Qty 
Apples;Red;10 
Apples;Green;30 

しかし、結果ファイルがあります:新しい行が導入されている

Fruit;Color;Qty 
Red;30;Apples 
Red;30;Apples 
Green;10;Apples 

たびに、それは以前のものを複製します。

いくつかのヒントやヘルプをいただければ幸いです。

皆様に感謝します。最後にforループはあなたが色を追加するたびに実行される

while 1: 
    fruitColor=raw_input('What color: ') 
    fruitNumber=raw_input('How many: ') 
    if fruitColor=='': 
     break 
    fruitList.append(fruitColor+';'+fruitNumber+';'+fruitType) 
    for article in fruitList: 
     order.write('%s\n' % article) 

ようにするために、それは最初のエントリを書きます:

+1

解除インデントをするサイクルの最後に試してみてください:) 今すぐ新しい要素を追加するたびにfruitListを通してサイクリングしています – pazqo

+0

ああ、ありがとう! –

+0

あなたには関係ありませんが、 'raw_input()'はすでに 'str'を返すので、' str'に再度変換する必要はありません。また、あなたのファイルを閉じる必要があります – Guillaume

答えて

3

あなたはそれに別のエントリを追加しfruitListたびに書き出しています、その後、あなたはそれが最初に書きますと、あなたは三分の一を追加していた場合は、2番目の、それはなど、第一、第二、第三

forループに外を移動して書きます、秒1を追加するときwhile 1:のうちlそれをアンインデントによってOOP:

while 1: 
    fruitColor=raw_input('What color: ') 
    fruitNumber=raw_input('How many: ') 
    if fruitColor=='': 
     break 
    fruitList.append(fruitColor+';'+fruitNumber+';'+fruitType) 

for article in fruitList: 
    order.write('%s\n' % article) 

また、すべてのでリストを使用してちょうど直接あなたがファイルに追加する文字列を書き込みません:

while 1: 
    fruitColor=raw_input('What color: ') 
    fruitNumber=raw_input('How many: ') 
    if fruitColor=='': 
     break 
    order.write(fruitColor+';'+fruitNumber+';'+fruitType) 

あなたが見てみたいことがありますcsv moduleでは、これはあなたがすべての;連結を避ける聞かせ:

import csv 


orderNum = raw_input('Introduce order reference: ') 
fruitType = str(raw_input('What fruit do you want to purchase: ')) 

with open('ORDERS{}.csv'.format(orderNum), 'wb') as out: 
    order = csv.writer(out, delimiter=';') 
    order.writerow(['Fruit', 'Color', 'Qty']) 
    while True: 
     fruitColor = raw_input('What color: ') 
     if not fruitColor: 
      break 
     fruitNumber = raw_input('How many: ') 
     order.writerow([fruitColor, fruitNumber, fruitType]) 
+0

ありがとう、:)私のコードの代替を見てうれしい。今度は休憩を取る時だと思います。 –

関連する問題