在Python的多处理中,不能将两个列表合并到一个映射中

2024-09-29 22:25:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个csv与SKU和网址,我打破了他们在两个列表

def myskus():
    myskus =[]
    with open('websupplies2.csv', 'r') as csvf:
        reader = csv.reader(csvf, delimiter=";")
        for row in reader:
            myskus.append(row[0]) # Add each skus to list contents
    return myskus


def mycontents():
    contents = []
    with open('websupplies2.csv', 'r') as csvf:
        reader = csv.reader(csvf, delimiter=";")
        for row in reader:
            contents.append(row[1]) # Add each url to list contents
    return contents

然后我多处理我的网址,但我想加入相应的SKU

if __name__ == "__main__":

    with Pool(4) as p:
     records = p.map(parse, web_links)

    if len(records) > 0:
         with open('output_websupplies.csv', 'a') as f:
          f.write('\n'.join(records))

我能把 记录=p.map(解析、SKU、web链接)

因为它不起作用

我想要的输出格式 会是

sku    price    availability
bkk11  10,00    available

我怎样才能做到这一点?你知道吗


Tags: csvdefaswithcontentsopenreaderrow
1条回答
网友
1楼 · 发布于 2024-09-29 22:25:37

小重构

我建议将这对函数命名为def get_skus()def get_urls(),以匹配问题定义。你知道吗

数据结构

拥有一对列表skusurls,似乎不适合您的高级问题。 把它们放在一起,作为(skuurl)元组的列表,或者作为sku_to_urldict。 也就是说,删除两个函数中的一个,这样您只需读取一次CSV,并将相关的详细信息保存在一起。 那么您的parse()例程将拥有更多可用信息。 元组列表可以归结为Monty的starmap()建议。你知道吗

正在写入结果

您使用的是:

    if len(records) > 0:
        with open('output_websupplies.csv', 'a') as f:
            f.write('\n'.join(records))

首先,至少测试一条记录可能是多余的,打开附加然后写零条记录并不是世界末日。 如果您关心文件上的时间戳,那么这也许是一个有用的优化。你知道吗

更重要的是,write()似乎很糟糕。 有一天,一个不幸的角色可能会潜入你的一张唱片。 最好将结构化记录提供给^{},以确保适当的引用。你知道吗

相关问题 更多 >

    热门问题