【问题标题】:(Closed) Python CSV: (Master and Detail) Search and Insert Value From Detail File into Specific Column On Master FilePython CSV:(主文件和详细信息)从详细文件中搜索并将值插入到主文件的特定列中
【发布时间】:2022-11-05 22:18:19
【问题描述】:

我实际上是 Python 新手):

我有关于 Python 和 CSV 的任务,我需要在从详细文件中获取数据后将值添加到主文件的特定列中。

让我们看看样本主文件、详细文件和预期输出。

主文件:

详细文件:

预期输出:

我有一些源代码可以运行它,但在这个阶段还没有完成。 让我们看看我在下面有什么:

from csv import DictReader
from collections import defaultdict


loaded = defaultdict(list)
month1=[]
month2=[]
month3=[]


def getdetailpayment(data):
    f=open(data)
    csv_file = csv.DictReader(f, delimiter=",")
    for row in csv_file:
        print(dict(row))
    f.close()

def search_masterfile(data):
    word = input("Search name: ")
    f=open(data)
    my_reader=csv.DictReader(f,delimiter=",")
    for row in my_reader:
        for entry in row:
            if row[entry]==word:
                print(row)
    #insert value into this row on specific column
   
   
    f.close()   
                  
search_masterfile("csv/master.csv")
getdetailpayment("csv/detail.csv") 

我计划玩字典,我假设我可以插入主文件值和现有的基于特定列的详细文件记录。不幸的是,我对这个范围的了解非常薄弱,我已经尝试从谷歌获取源代码,但仍然不是我想要的。

请帮我解决这个问题,我提前非常感谢你们。

【问题讨论】:

  • 请do not post images of data,将信息添加为文本(在代码围栏等内)。
  • 哦..对不起..我认为我想解释的更清楚。
  • 不,提供数据来解释很棒!只是不像链接图像(见here)。而是将它们打包粘贴到代码块中,以便于复制。

标签: python csv pivot


【解决方案1】:

如果你想用基本的 Python 做到这一点,你可以尝试以下方法:

import csv
from datetime import datetime as dt

with open("master.csv", "r") as file:
    reader = csv.DictReader(file)
    fieldnames = reader.fieldnames
    master = {(row["Name"], row["Key No"]): row for row in reader}

def to_month(string):
    return f"Month {dt.strptime(string, '%b-%y').month}"
    
with open("details.csv", "r") as file:
    next(file)
    for name, key, month, amount in csv.reader(file):
        master[(name, key)][to_month(month)] = amount

with open("result.csv", "w") as file:
    writer = csv.DictWriter(file, fieldnames=fieldnames)
    writer.writeheader()
    writer.writerows(master.values())
  • 第一步将主文件(此处为master.csv)读入字典master,其中(Name, Key No) 元组作为键(用于合并)。在获取列名的过程中 (fieldenames) 以便稍后编写。
  • 第二步是阅读详细信息文件(此处为details.csv)并更新master 中的相应值。 to_month 函数将月份字符串转换为相应的键(列名)。
  • 然后将结果写入一个新文件(此处为result.csv)。

您可能需要调整文件名。

给定输入的结果

  • master.csv:
    Name,Key No,Month 1,Month 2,Month 3
    A,1,,,
    B,2,,,
    C,3,,,
    D,4,,,
    
  • details.csv:
    Name,Key No,Month,Amount
    A,1,Feb-22,100
    B,2,Jan-22,80
    C,3,Feb-22,80
    D,4,Jan-22,100
    A,1,Jan-22,200
    C,3,Jan-22,90
    

是以下文件result.csv:

Name,Key No,Month 1,Month 2,Month 3
A,1,200,100,
B,2,80,,
C,3,90,80,
D,4,100,,

如果您必须经常做这样的事情,您可能需要查看Pandas library。

【讨论】:

    猜你喜欢
    • 2014-10-05
    • 1970-01-01
    • 2010-10-13
    • 1970-01-01
    • 1970-01-01
    • 2010-12-06
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    相关资源
    最近更新 更多