使用Python编写CSV时出错

使用Python编写CSV时出错,python,csv,file-io,numpy,Python,Csv,File Io,Numpy,我在用python编写的.csv文件中遇到了错误(这是必要的格式,因为我所在的团队依赖于.csvs)。以一种非模式的方式,数百个1g文件中都会出现错误。例如,仅一行多出10列,多出一行有多个输入,某些行缺少~10列。我已经重新运行了两次相同的脚本,在第二次运行时没有错误。我需要一种方法来确保这些文件被正确写入。下面是我正在使用的代码(我知道它不是最有效的,但我知道如何以这种方式来做,我想把它张贴在我是如何做的) 错误甚至包括第一列中的随机数值(应全部为“ALB”)、一组额外的观察行和一个观察缺少

我在用python编写的.csv文件中遇到了错误(这是必要的格式,因为我所在的团队依赖于.csvs)。以一种非模式的方式,数百个1g文件中都会出现错误。例如,仅一行多出10列,多出一行有多个输入,某些行缺少~10列。我已经重新运行了两次相同的脚本,在第二次运行时没有错误。我需要一种方法来确保这些文件被正确写入。下面是我正在使用的代码(我知道它不是最有效的,但我知道如何以这种方式来做,我想把它张贴在我是如何做的)


错误甚至包括第一列中的随机数值(应全部为“ALB”)、一组额外的观察行和一个观察缺少列(后期写入)。

作为旁白,使用xrange而不是range通常更快

您是否绝对确定运行作业的机器上的内存和磁盘是否良好?由于您的数据范围可达数百GB,因此您可能会看到基于硬件的损坏。即使机器看起来运行稳定而没有崩溃,在这些数据密度下,单位内存错误也是很常见的。如果任何硬件是边缘的,这就是我所期望的那种行为

您的磁盘是否运行校验和RAID格式?(ZFS是我的最爱)您使用ECC内存吗?当白天天气炎热时,你会看到更多的错误吗?您是否在机器本身或通过网络传输后看到这些错误


你的手术需要多长时间?您是否在最后看到了更多错误?

这不重要,但重要的是python版本、发行版和操作系统?您是否尝试过
numpy.savetxt
?我正在群集系统上使用/epd-7.0-2/。我还没有试过numpy.savetxt,但如果您能解释如何使用该程序编写标题行,然后是以下行,我将不胜感激。@mike:
将open('filename','w')作为f:\n f.write(header)\n np.savetxt(f,outsheet,fmt=“.2g”,delimiter=“,”
Hmmm。。。听到这可能是机械故障,既让人感到安慰,也让人感到不安。不幸的是,我对正在运行的系统了解不多。脚本运行大约需要1-1.5个小时,并且只在脚本结束时生成可识别的结果(写入文件)。注意,我在集群系统上并行运行了数百个,这也可能会混淆错误的可能性。感谢您的输入。数据如此之大,如果您直接读取文件,网络传输错误很可能是罪魁祸首。如果您正在存档、压缩和校验和,这会有所帮助。如果运行这些脚本的机器是一台合适的服务器,它可能有ECC内存。如果它是一台台式机,或者被重新设计成服务器的东西,它可能不会。ECC将阻止宇宙射线,但如果链的任何其他部分不好,它将不会真正起到帮助作用。作为一个一阶解决方案,如果您可以物理访问它,您可以尝试在机器上运行memtest86。感谢您提供的提示--您能多说一点关于归档、压缩和校验和的信息吗(即,我将如何使用这些,在这种情况下它可能实现什么)?
# 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()