Text 如何在python中多处理大型文本文件?
在我读入一个60 MB的csv文件后,我试图消化DictReader对象的行。我在这里问了一个问题:。代码重绘如下 然而,现在我意识到,将原始文本文件分块也可以做到这一点,然后再进行听写和逐行摘要。但是,我没有发现multiprocessing.Pool可以使用的io工具 谢谢你的任何想法Text 如何在python中多处理大型文本文件?,text,csv,io,python-3.x,multiprocessing,Text,Csv,Io,Python 3.x,Multiprocessing,在我读入一个60 MB的csv文件后,我试图消化DictReader对象的行。我在这里问了一个问题:。代码重绘如下 然而,现在我意识到,将原始文本文件分块也可以做到这一点,然后再进行听写和逐行摘要。但是,我没有发现multiprocessing.Pool可以使用的io工具 谢谢你的任何想法 source = open('/scratch/data.txt','r') def csv2nodes(r): strptime = time.strptime mktime = time.
source = open('/scratch/data.txt','r')
def csv2nodes(r):
strptime = time.strptime
mktime = time.mktime
l = []
ppl = set()
for row in r:
cell = int(row['cell'])
id = int(row['seq_ei'])
st = mktime(strptime(row['dat_deb_occupation'],'%d/%m/%Y'))
ed = mktime(strptime(row['dat_fin_occupation'],'%d/%m/%Y'))
# collect list
l.append([(id,cell,{1:st,2: ed})])
# collect separate sets
ppl.add(id)
return (l,ppl)
def csv2graph(source):
r = csv.DictReader(source,delimiter=',')
MG=nx.MultiGraph()
l = []
ppl = set()
# Remember that I use integers for edge attributes, to save space! Dic above.
# start: 1
# end: 2
p = Pool(processes=4)
node_divisor = len(p._pool)*4
node_chunks = list(chunks(r,int(len(r)/int(node_divisor))))
num_chunks = len(node_chunks)
pedgelists = p.map(csv2nodes,
zip(node_chunks))
ll = []
for l in pedgelists:
ll.append(l[0])
ppl.update(l[1])
MG.add_edges_from(ll)
return (MG,ppl)
这个问题也许可以通过问一个更具体的问题来改进——标题中的问题似乎过于宽泛。