我使用NumPy
python库在.csv
文件上运行大规模编辑。我正在使用这个python代码:
import numpy as np
def main():
try:
e,a,ad,c,s,z,ca,fn,ln,p,p2,g,ssn,cn,com,dob,doh,em = np.loadtxt('c:\wamp\www\_quac\carryover_data\SI\Employees.csv',delimiter=',',unpack=True,dtype='str')
x=0
dob = dob.split('/')
for digit in dob:
if len(digit) == 1:
digit = str('0'+digit)
dob = str(dob[2]+'-'+dob[0]+'-'+dob[1])
doh = doh.split('/')
for digit in doh:
if len(digit) == 1:
digit = str('0'+digit)
doh = str(doh[2]+'-'+doh[0]+'-'+doh[1])
for eID in e:
saveLine=eID+','+a[x]+','+ad[x]+','+c[x]+','+s[x]+','+z[x]+','+ca[x]+','+fn[x]+','+ln[x]+','+p[x]+','+p2[x]+','+g[x]+','+ssn[x]+','+cn[x]+','+com[x]+','+dob[x]+','+doh[x]+','+em[x]+'\n'
saveFile = open('fixedEmployees.csv','a')
saveFile.write(saveLine)
saveFile.close()
x+=1
except Exception, e:
print str(e)
main()
dob
和doh
包含一个字符串,例如4/26/2012
我试图将这些转换为mysql
友好DATE
表单,例如2012-04-26
。运行此脚本时打印的错误是
cannot set an array element with a sequence
它没有指定一条线,因此我不知道这究竟意味着什么。我对python很新;我已经用同样的错误检查了其他问题,但我无法理解他们的代码。非常感谢任何帮助。
答案 0 :(得分:1)
尝试使用zfill
重新格式化日期字符串,这样您就可以拥有' 0'在你的'之前。 (zfill
在左边填充一个字符串,用零填充宽度。)
doh = '4/26/2012'
doh = doh.split('/')
for i, s in enumerate(doh):
doh[i] = s.zfill(2)
doh = doh[2]+'-'+doh[0]+'-'+doh[1]
# result: '2012-04-26'
至于cannot set an array element with a sequence
,知道会有所帮助
那是在哪里发生的。我猜测数组的结构有问题。
答案 1 :(得分:0)
好的,要解决这个问题,我必须做几件事。删除try
- except
命令后,我发现错误位于第5行,e,a,ad,c,s
行等。在我复制之前,我无法解决问题strong> 2列我想专注于 并制作了一个新程序来处理这些。
然后我必须创建一个.txt
而不是.csv
,因为Excel会自动格式化日期,并在我甚至可以触摸它们之前逐字更改这些值。我学到了,没有办法解决这个问题。您无法关闭日期自动格式。 excel的一个严重问题。所以这是我对这个NumPy
脚本的解决方案(它改变第一列并保持第二列相同):
import numpy as np
def main():
dob,doh=np.loadtxt('temp.csv',
delimiter=',',
unpack=True,
dtype='str')
x=0
for eachDate in dob:
if any(c.isalpha() for c in eachDate):
newDate=eachDate
elif (eachDate == ''):
newDate=''
else:
sp = eachDate.split('/')
y=0
ndArray = ['','','']
for eachDig in sp:
if len(eachDig) == 1:
eachDig = str('0'+eachDig)
if y == 0:
ndArray[0] = eachDig
elif y == 1:
ndArray[1] = eachDig
elif y == 2:
ndArray[2] = eachDig
newDate=str(ndArray[2]+'-'+ndArray[0]+'-'+ndArray[1])
y=0
y+=1
print eachDate+'--->'+newDate
"""creates a .txt file with the edited dates"""
saveLine=str(newDate+','+doh[x]+'\n')
saveFile=open('__newTemp.txt','a')
saveFile.write(saveLine)
saveFile.close()
x+=1
main()
然后我使用Data->从Excel中导入带有“TEXT”格式选项的文本来将列添加到我的.csv
中。我意识到这可能是笨重而且笨拙,但它完成了工作:3