我需要一个小蟒蛇脚本,他会问我3个问题,然后使用这3个答案的列表创建一个.csv文件(其中一个在每一行都是相同的),它解释起来有点复杂但是在示例中很容易看到,所以有一个例子:
What fruit do you want to purchase ?
- Apples
What color ?
- Red
How many?
- 10
What color ?
- Green
How many?
- 30
结果文件应该有:
Fruit;Color;Qty
Apples;Red;10
Apples;Green;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
Red;30;Apples
Red;30;Apples
Green;10;Apples
每次引入新行时,都会复制以前的行。
一些提示或帮助将不胜感激。
感谢大家。
答案 0 :(得分:3)
每次向其添加其他条目时,您都会写出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)
每次添加颜色时都会运行最后的for
循环,因此它会写入第一个条目,然后当您添加第二个条目时,它会写入第一个条目并且第二,如果你要添加第三个,它会写第一个,第二个和第三个等等。
通过取消缩进来移动for
循环的while 1:
循环 :
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])