与此同时,我节省了很多没有列名的csv,因此我可以使用cat
在unix中快速将它们组合在一起而不将它们组合在一起。这些csv有1000多列,所以当我重新聚合时,我想保存列标题的单个副本,但因为我是并行创建这些文件,所以我只想要第一个工作来解决这些问题。 pandas index object。
通常,为了在编写文件时避免竞争条件,我会根据this question使用os.open()
。但是,我试图在酸洗时将它结合起来:
cPickle.dump( df.columns, os.open( "/dir/my_columns.pkl", os.O_WRONLY|os.O_CREAT|os.O_EXCL ),-1 )
但是pickle.dump
的第二个参数需要一个带有write属性的参数,但os.open()
返回的对象没有属性。如果多个线程竞相创建它,是否有一种替代方案可以让我安全地保存这个对象?
答案 0 :(得分:0)
您可以使用os.open
创建新文件,将其关闭os.close
,然后使用open
重新打开:
import os
import cPickle
fileName = "/dir/my_columns.pkl"
try:
# Ensure that only one thread continues beyond this point
os.close(os.open( fileName, os.O_CREAT|os.O_EXCL ))
except OSError:
raise RuntimeError(fileName + " could not be created.")
with open(fileName, 'w') as f:
cPickle.dump( df.columns, f, -1 )