使用Python编写CSV时出错
作者:互联网
我在用python编写的.csv文件中遇到错误(必要格式,因为我所在的团队依赖于.csvs).以无模式的方式,错误会蔓延到成百上千个1g文件中.例如,额外的10列仅用于1行,额外的行具有错误的输入,某些行缺少〜10列.我已经两次重新运行了相同的脚本,并且在第二次运行中没有错误.我需要一种方法来确保这些文件被正确写入.这是我正在使用的代码(我知道它不是最有效的,但是我知道如何以这种方式进行操作,我想将其发布为我的工作方式).
# Sample inputs, representative of the actual data I'm working with.
output = np.zeros([40000, 1000]) # for example
iso3 = 'ALB'
sex = 'M'
year = np.ones(40000)
post_env = np.repeat(10, 40000)
post_cause = np.repeat('a', 40000)
post_pop = np.repeat(100, 40000)
outsheet = np.zeros([output.shape[0], output.shape[1]+7], dtype='|S20')
outsheet[:, 0] = iso3
outsheet[:, 1] = sex
outsheet[:, 2] = np.array(post_year, dtype='|S20')
outsheet[:, 3] = np.array(post_age, dtype='|S20')
outsheet[:, 4] = np.array(post_cause, dtype='|S20')
outsheet[:, 5] = np.array(post_env, dtype='|S20')
outsheet[:, 6] = np.array(post_pop, dtype='|S20')
outsheet[:, 7:] = np.array(output, dtype='|S20')
outsheet[outsheet=='nan'] = '.'
first_row = ['draw' + str(i) for i in range(output.shape[1])]
first_row.insert(0, 'population')
first_row.insert(0, 'envelope')
first_row.insert(0, 'cause')
first_row.insert(0, 'age')
first_row.insert(0, 'year')
first_row.insert(0, 'sex')
first_row.insert(0, 'iso3')
outfile = open('filename', 'w')
writer = csv.writer(outfile)
writer.writerow(first_row)
writer.writerows(outsheet)
outfile.close()
错误甚至在第一列中包括随机数值(应全部为“ ALB”),用于观察的额外行集以及观察缺少的列(写后).
解决方法:
顺便说一句,使用xrange代替range通常更快.
您是否完全确定运行该作业的计算机上的内存和磁盘是否良好?由于您的数据范围达到数百GB,因此您不会看到基于硬件的损坏.即使机器看起来稳定运行而不会崩溃,在这些数据密度下,单位内存错误也是很常见的.如果有任何硬件是微不足道的,这就是我期望的那种行为.
您的磁盘是否运行校验和突袭检查格式? (ZFS是我的最爱)您是否正在使用ECC内存?白天天气炎热时,您还会看到更多错误吗?您是在机器本身上还是在通过网络传输之后看到这些错误?
您的操作需要多长时间?您看到更多错误了吗?
标签:csv,file-io,python,numpy 来源: https://codeday.me/bug/20191207/2087579.html