2017-06-05 20 views
0

所以我有两个的CSV文件。一种是按以下格式:不是在列中的所有数据将被复制到另一个csv文件

last name, first name, Number 

另一种是格式如下:

number, quiz 

我希望创建一个需要这两个CSV文件,并给了我一个文件下面的一个新的输出文件格式:

last name, first name, number, quiz. 

我已经尝试了下面的代码,它的工作原理,但只适用于前两个输入文件中列出的第一人。我不确定我做错了什么。另外,我不想假定两个输入文件遵循相同的顺序。

import sys, re 
import numpy as np 
import smtplib 
from random import randint 
import csv 
import math 

col = sys.argv[1] 
source = sys.argv[2] 
target = sys.argv[3] 
newtarg = sys.argv[4] 


input_source = csv.DictReader(open(source)) 
input_target = csv.DictReader(open(target)) 
data = {} 
t =() 

for row in input_target: 
    t = row['First Name'], row['number'] 
    for rows in input_source: 
     if rows['number'] == row['number']: 
      t = t + (rows[col],) 
      name = row['Last Name'] 
      data[name] = [t] 
      rows.next() 
     row.next() 


with open(newtarg,'w') as out: 
    csv_out=csv.writer(out) 
    for key, val in data.items(): 
     csv_out.writerow([key] + list(val)) 

回答

1

这可能是一个工作,pandas,Python的数据分析库:

import pandas as pd 

x1 = pd.read_csv('x1.csv') 
x2 = pd.read_csv('x2.csv') 
result = pd.merge(x1, x2, on='number') 
result.to_csv('result.csv', 
       index=False, 
       columns=['Last Name', 'First Name', 'number', 'quiz']) 

参考:https://chrisalbon.com/python/pandas_join_merge_dataframe.html

+0

好吧我认为我的工作很好我唯一的问题是当我合并文件。我得到一个分隔合并的列 – K22

+0

@Kate这可能是因为你在第一个输入文件中有一个额外的列。查看我最近编辑的'columns ='参数为'.to_csv()'。这样,您可以明确地控制打印哪些列。 –

0

我觉得下面的工作。 注:我已经取出所有的东西在并非被使用在你的问题的代码(如你应该张贴以前做过)。我也硬编码输入值进行测试。

import csv 

source = 'source1.csv' 
target = 'target1.csv' 
newtarg = 'new_output.csv' 

targets = {} 
with open(target) as file: 
    for row in csv.DictReader(file): 
     targets[row['number']] = row['quiz'] 

with open(source) as src, open(newtarg, 'w') as out: 
    reader = csv.DictReader(src) 
    writer = csv.writer(out) 
    writer.writerow(reader.fieldnames + ['quiz']) # create a header row (optional) 
    for row in reader: 
     row.update({'quiz': targets.get(row['Number'], 'no match')}) 
     writer.writerow(row.values()) 
+0

这给了我一个输出文件只用数字 – K22

+0

凯特:如果你想从两个输入文件的编辑你的问题,增加了几个样本行,我也许能解决这个问题,我创建并使用了自己的输入文件测试我的答案中的代码(它似乎工作正常)。你使用的是什么版本的Python。我的答案中的代码是为Python 3.x编写的。 – martineau

相关问题