转换期间值我有我写到另一个文件CSV文件,但在这个过程中要基于大于或小于更改值。例如,在新文件的列(第2行)中,我想根据列中的值将数据中的数据转换为单词。我的实际数据有更多列和数千行,不超过10K行。示例如下:的Python 3.5重新写入新的CSV
Input.csv
duck,35,35
car,100,502
baseball,200,950
gun,500,495
taco,300,300
guitar,100,700
barbie, 200,25
gum,300,19
Desired Output.csv
duck,35,35,order now
car,100,502,order next month
baseball,200,950,no order necessary
gun,500,495,order next month
taco,300,300,order next month
guitar,100,700,order next month
barbie, 200,25,order urgent
gum,300,19,order urgent
这是我的代码到目前为止,但我在将数额转换为新值时遇到问题。我想我需要使用枚举,但没有发现任何使用此方法进行csv转换的示例。请协助。
import csv
with open('INTERIM RESULTS.CSV', 'r') as source:
rdr = csv.reader(source)
with open('INTERIM RESULTS FIXED.CSV', 'w', newline = '') as result:
wtr = csv.writer(result)
for r in rdr:
wtr.writerow((r[0], r[1], r[2]))
编辑:采取匿名'的建议,我想出了下面的代码。问题是,在我的“if”/“elif”语句中,我无法获得正确的输出。输出我currenlty得到是不正确的,列在下面。请协助。
import csv
CODE0 = '25'
CODE1 = '50'
CODE2 = '500'
CODE3 = '900'
with open('input.csv', 'r') as source, open('output.csv', 'w') as result:
reader = csv.reader(source)
writer = csv.writer(result)
for row in reader:
val = row[2]
if val <= CODE0: # below 25 order urgent
writer.writerow((row[0], row[1], row[2], 'order urgent'))
elif val <= CODE1: # below 50 order now
writer.writerow((row[0], row[1], row[2], 'order now'))
elif val <= CODE2: # below 500 order next month
writer.writerow((row[0], row[1], row[2], 'order next month'))
elif val < CODE3: # below 900 order next month
writer.writerow((row[0], row[1], row[2], 'order next month'))
elif val >= CODE3: #over 900 no order necessary
writer.writerow((row[0], row[1], row[2], 'no order necessary'))
Output.csv
duck,35,35,order now
car,100,502,order next month
baseball,200,950,no order necessary
gun,500,495,order now (this is wrong, should be next month)
taco,300,300,order now (this is wrong, should be next month)
guitar,100,700,order next month
barbie, 200,25,order urgent
gum,300,19,order urgent
编辑:我采取了另一条路线,并用Anonymou的指导解决了我的问题。请看下面对我有用的东西:我不得不放弃大于和超出范围。我还必须删除“val”才能使其正确工作。
import csv
with open 'input.csv', 'r') as source
rdr = csv.reader(source)
with open ('output.csv', 'w', newline = '') as result:
wtr = csv.writer(result)
for r in rdr:
if int (r[2]) in range(0,36):
wtr.writerow ((r[0], r[1], 'order urgent'))
elif int(r[2]) in range(36,51):
wtr.writerow ((r[0], r[1], 'order now'))
elif int(r[2]) in range(51,501):
wtr.writerow ((r[0], r[1], 'order next month'))
elif int(r[2]) in range(501,999):
wtr.writerow ((r[0], r[1], 'no need to order'))
这很快,欣赏输入。我如何使它的功能大于或等于现在小于50的订单,或者下个月大于300小于500的订单?我会试着将它放入函数中,看看它是如何工作的,以及它是否像听起来那么容易。 – james
是的,只需创建一个函数来分析值('str',但你需要'int'来比较),然后使用if语句来实现你想要的。替换'CODES.get(val,val)'使其工作。 – Anonymous