Ошибка insert_one документа pymon go из файла csv - PullRequest
1 голос
/ 07 февраля 2020

Я новичок в python и mongodb, и я пытаюсь записать из файла cvs в документ pymon go. Ошибка выглядит следующим образом: T ypeError: объект 'str' не может быть вызван Потому что? Я прилагаю соответствующий код Спасибо

import csv
import sys
import json
from pymongo import MongoClient

client = MongoClient(host="localhost", port=27017)
db=client["test"]
mycol=["movimenti"]
print(mycol)

with open ('Movimenti.csv','r') as f:
    reader=csv.reader(f, delimiter=';')
    next(reader, None)
    data = []


    try:
        for row in reader:
            for col in row:
                mydict = {"datacontabile": col(1), "datavaluta":   col(3),"causale": col(4), "descrizione": col(5), "importo": col(6)  }                x = mycol.insert_one(mydict)
    except csv.Error as e:
        sys.exit('file{} , line{}: {}')

1 Ответ

0 голосов
/ 07 февраля 2020

Ваша ошибка происходит не от pymon go, а от попытки вызвать col при определении словаря. Это потому, что ваши столбцы строковые:

with open('some_csv_file.csv', 'r') as f:
   reader = csv.reader(f)
   next(reader, None)

   for row in reader: # each row
       for col in row: #each value in your row
           print(type(col)) #outputs "<class 'str'>"

Скобки используются только для вызова функций. Если вы хотите взять первый символ вашей строки, используйте скобки:

s = "Hello world"
print(s[0]) # outputs "H"
print(s(0)) # outputs TypeError: 'str' object is not callable

Обычно одна строка в csv - это одна запись в вашей базе данных. Поэтому я думаю, что ваш код должен быть:

        for row in reader:
            mydict = {"datacontabile": row[1], "datavaluta":  col[3], "causale": col[4], "descrizione": row[5], "importo": [6]} 
...