AEA*_*AEA 0 python csv loops python-2.7
@堆栈溢出
我有一个脚本,根据匹配3个条件,在我的csv末尾添加三列.
我理解的问题是,代码是从rdr重新读取行,并且wrt是修改后的行,在初始循环之后我尝试迭代wrt,但是代码无法做到这一点.
import csv
import datetime
import copy
from collections import defaultdict
with open(r"FullMergedData.csv") as i, open(r"FullMergedDataWSPSR.csv", "wb") as o:
rdr = csv.reader(i, delimiter ="|")
wrt = csv.writer(o, delimiter ="|")
data, currdate = defaultdict(lambda:[0, 0, 0, 0]), None
calclist = [6, 7, 19, 23, 25, 26, 35, 62, 64]
for calc in calclist:
for counter2, line in enumerate(rdr):
if counter2 != 0:
date, name = datetime.datetime.strptime(line[50], '%d/%m/%Y'), line[calc]
if date != currdate or not currdate:
for v in data.itervalues():
v[:2] = v[2:]
currdate = date
top,bottom = data[name][0:2]
try:
quotient = float(top)/bottom
except ZeroDivisionError:
quotient = 0
wrt.writerow(line + data[name][:2]+ [quotient])
data[name][3] += 1
if line[38] == "1": data[name][2] += 1
Run Code Online (Sandbox Code Playgroud)
如果有人可以帮助我们使用此代码,我将非常感激.非常感谢AEA
import csv
import datetime
import copy
from collections import defaultdict
with open(r"FullMergedData.csv") as i, open(r"FullMergedDataWSPSR.csv", "wb") as o:
rdr = csv.reader(i, delimiter ="|")
wrt = csv.writer(o, delimiter ="|")
data, currdate = defaultdict(lambda:[0, 0, 0, 0]), None
calclist = [6, 7, 19, 23, 25, 26, 35, 62, 64]
for counter, calc in enumerate(calclist):
if counter == 0:
for counter2, line in enumerate(rdr):
if counter2 != 0:
date, name = datetime.datetime.strptime(line[50], '%d/%m/%Y'), line[calc]
if date != currdate or not currdate:
for v in data.itervalues():
v[:2] = v[2:]
currdate = date
top,bottom = data[name][0:2]
try:
quotient = float(top)/bottom
except ZeroDivisionError:
quotient = 0
wrt.writerow(line + data[name][:2]+ [quotient])
data[name][3] += 1
if line[38] == "1": data[name][2] += 1
else:
for line in wrt:
date, name = datetime.datetime.strptime(line[50], '%d/%m/%Y'), line[calc]
if date != currdate or not currdate:
for v in data.itervalues():
v[:2] = v[2:]
currdate = date
top,bottom = data[name][0:2]
try:
quotient = float(top)/bottom
except ZeroDivisionError:
quotient = 0
wrt.writerow(line + data[name][:2]+ [quotient])
data[name][3] += 1
if line[38] == "1": data[name][2] += 1
Run Code Online (Sandbox Code Playgroud)
Traceback (most recent call last):
File "C:\mergecalculator.py", line 35, in <module>
for line in wrt:
TypeError: '_csv.writer' object is not iterable
Run Code Online (Sandbox Code Playgroud)
我不是100%确定这是你想要的,但尝试这个逻辑.您希望处理每个项目calclist以产生额外的3列.calclist处理完所有元素后,将生成的额外列添加到该行并写入csv文件.
...
for counter2, line in enumerate(rdr):
extra_cols = []
for calc in calclist:
# process data to get extra 3 columns
extra_cols.extend(data[name][:2]+ [quotient])
wrt.writerow(line + extra_cols)
Run Code Online (Sandbox Code Playgroud)