我在csv文件中有三列
Number Value Checked
1111 5
1234 6
1111 0 yes
4444 0 yes
5555 8
4444 7
如果选中的字段为“是”,我需要在“数字”列中找到与其关联的数字是否重复。如果是,那么我想要Checked字段显示“是”
示例输出:
Number Value Checked
1111 5 yes
1234 6
1111 0 yes
4444 0 yes
5555 8
4444 7 yes
我正在使用python。这是一个csv文件。 对不起,我是stackoverflow的新手。基本上我正在尝试读取列中总共为0的行。如果它们为0,那么我创建了一个“Checked”列,对于变为null的值,显示“yes”。例如,如果数字“111111”具有值“-8”和“8”,则在执行sumif之后,它将表示0,因此,检查字段将为“是”。但问题是我的代码会在另一行之后读取一行,因此如果有两行的值为“9”和“-9”,则仅对第二行而不是第一行得到0。我希望选中的列为这两行添加“是”。 这是我的代码的一部分:
edict={}
if edict.get(newrow[-10],"")=="":
edict[newrow[-10]]=newrow[47]
else:
edict[newrow[-10]]=float(newrow[47])+float(edict[newrow[-10]])
newrow[-9]=edict[newrow[-10]]
if newrow[-9]==0:
newrow[-11]="Hide"
row-10是字段Number row47是Value 第11行已检查
如果不清楚,请告诉我。
答案 0 :(得分:0)
ALGO:
csv
模块阅读输入CSV文件。info
以保存行详细信息,checked_value
为已检查的是数字。info
yes
,如果是,请在row[0]
列表中附加checked_value
号码。info
字典,如果row[0]
列表中有checked_value
号,请再次检查每一行,如果更新行显示为yes
。-
代码:
import csv
import pprint
input_file = "input1.csv"
with open(input_file, 'rb') as fp:
root = csv.reader(fp)
info = {}
checked_value = []
for i, row in enumerate(root):
info[i] = row
if row[2]=="yes":
checked_value.append(row[0])
print "Debug 1: info: "
pprint.pprint(info)
for i,j in info.items():
if j[0] in checked_value:
j[2] = "yes"
print "Debug 2: info: "
pprint.pprint(info)
#- Write file
with open("output1.csv", 'wb') as fp:
root = csv.writer(fp, delimiter=',')
root.writerows(info.values())
输出: 调试语句:
vivek@vivek:~/Desktop/stackoverflow/anna$ python 6.py
Debug 1: info:
{0: ['Number', 'Value', 'Checked'],
1: ['1111', '5', ''],
2: ['1234', '6', ''],
3: ['1111', '0', 'yes'],
4: ['4444', '0', 'yes'],
5: ['5555', '8', ''],
6: ['4444', '7', '']}
Debug 2: info:
{0: ['Number', 'Value', 'Checked'],
1: ['1111', '5', 'yes'],
2: ['1234', '6', ''],
3: ['1111', '0', 'yes'],
4: ['4444', '0', 'yes'],
5: ['5555', '8', ''],
6: ['4444', '7', 'yes']}
Output1.csv
Number,Value,Checked
1111,5,yes
1234,6,
1111,0,yes
4444,0,yes
5555,8,
4444,7,yes