【发布时间】:2018-05-02 22:18:12
【问题描述】:
我有一个 CSV 文件,其中包含一个 ID 列、6 个月列、2 个季节列和 1 个年度列。例如:
`[['ID', '20180922', '20180820', '20180728', '20180524', '20180424', '20180322', Winter, Summer, Annual],
['1', '10', '2', '4', '4', '4', '4', '0', '0', '0'],
['2', '4', '2', '2', '10', '10', '4', '0', '0', '0'],
['3', '10', '2', '4', '4', '2', '4', '0', '0', '0'],
['4', '2', '2', '2', '4', '10', '10', '0', '0', '0'],
['5', '10', '4', '4', '2', '10', '10', '0', '0', '0'],
['6', '2', '2', '4', '10', '10', '10', '0', '0', '0'],
['7', '10', '10', '2', '4', '4', '10', '0', '0', '0']]`
前三个月(9 月、8 月、7 月)是夏季月份,接下来的三个月(5 月、4 月、3 月)是冬季月份。表中的值是作物代码。我试图将值减少到季节然后每年。
所以对于冬季专栏:
- 如果冬季月份(5 月、4 月、3 月)有任何 2,则用 2 填充 Winter 列
- 否则,用 5 月的任何内容填充 Winter 列
夏季专栏:
- 如果夏季月份(9 月、8 月、7 月)有任何 2,则在 Summer 列中填写 2
- 否则用 10 填充 Summer 列
对于年度列:
- 如果 Winter 或 Summer 列中有 2,则用 2 填写 Annual
- 其他都是 10
这就是我现在的做法,但我想知道是否有更清洁的方式来做这件事。谢谢
inputFileName = 'input.csv'
outputFileName = 'output.csv'
with open(inputFileName, 'rb') as inFile, open(outputFileName, 'wb') as outfile:
r = csv.reader(inFile)
w = csv.writer(outfile)
table = list(r)
w.writerow(table[0])
# Winter
for line in table:
if line[4] == '2' or line[5] == '2' or line[6] == '2':
w.writerow((line[0], line[1], line[2], line[3], line[4], line[5], line[6], '2', line[8], line[9]))
elif line[4] == '4' and line[5] == '4' and line[6] == '10':
w.writerow((line[0], line[1], line[2], line[3], line[4], line[5], line[6], '4', line[8], line[9]))
elif line[4] == '4' and line[5] == '10' and line[6] == '10':
w.writerow((line[0], line[1], line[2], line[3], line[4], line[5], line[6], '4', line[8], line[9]))
elif line[4] == '10' and line[5] == '4' and line[6] == '10':
w.writerow((line[0], line[1], line[2], line[3], line[4], line[5], line[6], '10', line[8], line[9]))
elif line[4] == '10' and line[5] == '10' and line[6] == '4':
w.writerow((line[0], line[1], line[2], line[3], line[4], line[5], line[6], '10', line[8], line[9]))
elif line[4] == '10' and line[5] == '4' and line[6] == '4':
w.writerow((line[0], line[1], line[2], line[3], line[4], line[5], line[6], '10', line[8], line[9]))
elif line[4] == '10' and line[5] == '10' and line[6] == '10':
w.writerow((line[0], line[1], line[2], line[3], line[4], line[5], line[6], '10', line[8], line[9]))
elif line[4] == '4' and line[5] == '4' and line[6] == '4':
w.writerow((line[0], line[1], line[2], line[3], line[4], line[5], line[6], '4', line[8], line[9]))
# Summer
for row in table:
if line[1] == '2' or line[2] == '2' or line[3] == '2':
w.writerow((line[0], line[1], line[2], line[3], line[4], line[5], line[6], line[7], '2', line[9]))
else:
w.writerow((line[0], line[1], line[2], line[3], line[4], line[5], line[6], line[7], '10', line[9]))
另外,我的代码的 Summer 部分似乎没有运行。
【问题讨论】:
标签: python list csv if-statement