AttributeError: у объекта 'tuple' нет атрибута, объединяющего csv - PullRequest
0 голосов
/ 26 марта 2019

У меня есть несколько .csv файлов в папке, и они имеют одинаковую структуру. Первые два столбца содержат два значения k1 и k2, третий столбец содержит числовое значение. Я хочу перебрать эти файлы и объединить их в новый csv, где у меня будут первые два столбца для K1 и K2, а затем n столбцов, по одному для каждого из n файлов. Это мое решение:

import glob
import csv
import os

def get_data(filename):
    '''function to read the data form the input csv file to use in the analysis'''
    with open(filename, 'r') as f:
        reader = csv.reader(f)                      
        result = {tuple(row[:2]): row[2] for row in reader}
        return result   

path='mypath' 
for infile in glob.glob(os.path.join(path, '*.csv')):

    print ("Current File Being Processed is:  " + infile) 
    #use split to seperate the path and name of the file
    (PATH, FILENAME) = os.path.split(infile)
    all_data=[]
    #adds the data from the csv file to a blank list so it can be operated on
    all_data.extend(get_data(infile))

result = {}

for dic in all_data:
    for key in (dic.viewkeys() | result.keys()):
        if key in dic: result.setdefault(key, []).append(dic[key])
        else: result.setdefault(key, []).append(0)


with open('mypath', 'w') as csvfile:
        writer = csv.DictWriter(csvfile, fieldnames=csv_columns)
        writer.writeheader()
        for data in result:
            writer.writerow(data)

но возвращается

Traceback (most recent call last):
  File "C:\Users\Desktop\p.py", line 26, in <module>
    for key in (dic.viewkeys() | result.keys()):
AttributeError: 'tuple' object has no attribute 'viewkeys'

1 Ответ

1 голос
/ 26 марта 2019
    result = {tuple(row[:2]): row[2] for row in reader}

Вы храните ключ как кортеж (ключ) и, следовательно, повторяете его, выдавая ошибку для вас.

...