Мне нужно разделить имя столбца на имя, отчество (если доступно) и фамилию столбцы при чтении CSV в sql базы данных - PullRequest
0 голосов
/ 12 апреля 2020

Я новичок в программировании, у меня есть CSV-файл, который я хочу прочитать в базу данных sql, но при чтении CSV-файла мне нужно разделить столбец имени на first_name, middle_name и last_name. содержимое файла csv выглядит следующим образом:

name, location, birth_year
Jane Tolu Omo, Rayfield, 1979
Myles Jim Jones, London, 1980

, поэтому я написал это ниже:

# Creating a dictionary to hold the different names
nameDict = {name: None for name in names}

# Creating another dictionary to full students (csv) data
studentsDict = {}

# open csv file given by command line argument, read it one line at a time
with open('characters.csv', newline='') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        nameDict = row['name'].split()
        studentDict = (nameDict, row['house'], row['birth'])
        print(studentDict)

Я получил это ниже:

(['Harry', 'James', 'Potter'], 'Gryffindor', '1980')
(['Hermione', 'Jean', 'Granger'], 'Gryffindor', '1979')
(['Isobel', 'MacDougal'], 'Ravenclaw', '1980')
(['Justin', 'Finch-Fletchley'], 'Hufflepuff', '1979')

Просто хочу Спросите, правильно ли я понял, и есть ли побочные эффекты или как сделать это лучше. Спасибо за Ваш добрый отзыв

Ответы [ 3 ]

0 голосов
/ 12 апреля 2020

Я бы go с pandas для этой операции.

import pandas as pd
# read input csv
df = pd.read_csv('61165261-input.csv')
df[['firtname','middlename','lastname']] = df.name.str.split(expand=True)
# write updated data frame to new csv
df.to_csv('61165261-input.csv', index=False)
print(df)

вывод:

              name   location   birth_year   ...    firtname middlename lastname
0    Jane Tolu Omo   Rayfield         1979   ...        Jane       Tolu      Omo
1  Myles Jim Jones     London         1980   ...       Myles        Jim    Jones
0 голосов
/ 20 апреля 2020

Вот строки кода, которые наконец-то помогли мне решить эту проблему:

Открытие CSV-файла

с помощью open (argv [1], "r") в качестве student_file:

# Reading the CSV file
reader = csv.DictReader(student_file)

# Loop through rows
for row in reader:
    names = row["name"].split()

    if len(names) == 2:
        first = names[0].strip()
        last = names[1].strip()
        db.execute("INSERT INTO students (first, middle, last, house, birth) VALUES(?, ?, ?, ?, ?)",
                   first, None, last, row["house"], int(row["birth"]))

    elif len(names) == 3:
        first = names[0].strip()
        middle = names[1].strip()
        last = names[2].strip()
        db.execute("INSERT INTO students (first, middle, last, house, birth) VALUES(?, ?, ?, ?, ?)",
                   first, middle, last, row["house"], int(row["birth"]))
0 голосов
/ 12 апреля 2020

Это способ, но, вероятно, вам нужно создать метки для нового списка имен, чтобы избежать ненужного зацикливания. Если вы анализируете данные, я рекомендую вам использовать Pandas. Pandas более динамичный c и быстрый, чтобы сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...