小编Ene*_*nes的帖子

具有namedtuple的多处理对象 - Pickling Error

我在我想要进入多处理的对象中使用namedtuples时遇到了麻烦.我收到了酸洗错误.我尝试了其他stackoverflow帖子中的一些东西,但我无法成功.这是我的代码的结构:

package_main,test_module

 import myprogram.package_of_classes.data_object_module
 import ....obj_calculate

 class test(object):
       if __name__ == '__main__':
             my_obj=create_obj('myobject',['f1','f2'])
             input = multiprocessing.Queue()
             output = multiprocessing.Queue()
             input.put(my_obj)
             j=Process(target=obj_calculate, args=(input,output))
             j.start()
Run Code Online (Sandbox Code Playgroud)

package_of_classes,data_object_module

 import collections
 import ....load_flat_file

 def get_ntuple_format(obj):
     nt_fields=''
     for fld in obj.fields:
         nt_fields=nt_fields+fld+', '
     nt_fields=nt_fields[0:-2]
     ntuple=collections.namedtuple('ntuple_format',nt_fields)
     return ntuple

 Class Data_obj:
    def __init__(self, name,fields):
        self.name=name
        self.fields=fields
        self.ntuple_form=get_ntuple_format(self)  

    def calculate(self):
        self.file_read('C:/files','division.txt')

    def file_read(self,data_directory,filename):
        output=load_flat_file(data_directory,filename,self.ntuple_form)
        self.data=output
Run Code Online (Sandbox Code Playgroud)

utils_package,utils_module

def create_dataobj(name,fields):
    locals()[name]=Data_Obj(name,fields)
    return locals()[name]  

def obj_calculate(input,output):   
    obj=input.get()
    obj.calculate()
    output.put(obj)
Run Code Online (Sandbox Code Playgroud)

loads_module

def load_flat_file(data_directory,filename,ntuple_form):
     csv.register_dialect('csvrd', delimiter='\t', quoting=csv.QUOTE_NONE)
     ListofTuples=[]
     with open(os.path.join(data_directory,filename), 'rb') as f:
          reader …
Run Code Online (Sandbox Code Playgroud)

python object pickle multiprocessing namedtuple

7
推荐指数
1
解决办法
2159
查看次数

Python - CSV阅读器列表理解

我正在尝试使用CSV阅读器有效地读取文件中的列.代码是:

import csv
csv.register_dialect('csvrd', delimiter='\t', quoting=csv.QUOTE_NONE)


with open('myfile.txt', 'rb') as f:
    reader = csv.reader(f,'csvrd')
    a0=[x[0] for x in reader]
    a1=[x[1] for x in reader]
Run Code Online (Sandbox Code Playgroud)

我获取第一列中的值,但a1为空.如果我先写a1,那么a0是空的.

我知道一个简单的解决方案,插入

reader=[x for x in reader]
Run Code Online (Sandbox Code Playgroud)

但只是好奇的原因.当您从阅读器读取条目时,它是否被删除?

示例myfile.txt

c11 c21 c31
c21 c22 c32
Run Code Online (Sandbox Code Playgroud)

python csv list-comprehension list

4
推荐指数
1
解决办法
1587
查看次数