Изменение значения из файла CSV - PullRequest
0 голосов
/ 13 марта 2019

Я борюсь с какой-то проектной работой и думал, что кто-то может помочь мне здесь. Я пишу инструмент базы данных, и мне нужно иметь возможность найти значение идентификатора у человека в CSV-файле и изменить статус его сотрудника с активного на неактивный. Имея очень базовые знания Python, я борюсь с этим. Вот мой код, который работает сейчас.

def menu():
  print("Welcome to the Employee database\n")
  print("1. Add a new employee\n")
  print("2. Remove an existing employee\n")
  print("3. Change/modify the details of an existing employee\n")
  print("4. Search and display the details for a particular employee\n")
  print("0. Quit\n")

  choice = int(input("Please select an option using the numbers above"))
  if choice == 0:
     return
  if choice == 1:
     add()
  if choice == 2:
     remove()
  if choice == 3:
     change()
  if choice == 4:
     search()

def add():
  print("Adding a new employee, please enter the following details\n")
  employee_id = int(input("Enter your employee ID\n"))
  name = input("Enter your name\n")
  department = input("Enter your department\n")
  designation = input("Enter your designation\n")
  joining_date = input("Enter your starting date [DD/MM/YYYY]\n")
  employee_status = input("Enter the employee status [Active/Inactive]\n")

  with open('database.csv', "a") as f:
     employee_info = ""
     employee_info += "%s," % employee_id
     employee_info += "%s," % name
     employee_info += "%s," % department
     employee_info += "%s," % designation
     employee_info += "%s," % joining_date
     employee_info += "%s," % employee_status
     employee_info += "\n"
     f.write(employee_info)
 menu()

Мне нужно, чтобы он мог получить от пользователя идентификатор, который он хочет сделать неактивным, найти нужного человека в csv и изменить его тег на неактивный. Возможно ли это?

Буду признателен за любую помощь!

Edit:

Вот содержимое файла csv:

Employee ID,Name,Department,Designation,Joining Date,Employee Status
456,Matt,IT,Data,02/04/2018,Active
245,John,HR,Manager,30/04/2019,Active

Ответы [ 4 ]

0 голосов
/ 13 марта 2019

Самый простой способ:

import csv

def menu():
  print("Welcome to the Employee database\n")
  print("1. Add a new employee\n")
  print("2. Remove an existing employee\n")
  print("3. Change/modify the details of an existing employee\n")
  print("4. Search and display the details for a particular employee\n")
  print("5. Inactive Employee\n")
  print("0. Quit\n")

  choice = int(input("Please select an option using the numbers above"))
  if choice == 0:
     return
  if choice == 1:
     add()
  if choice == 2:
     remove()
  if choice == 3:
     change()
  if choice == 4:
     search()
  if choice == 5:
     inactive()

def add():
  print("Adding a new employee, please enter the following details\n")
  employee_id = int(input("Enter your employee ID\n"))
  name = input("Enter your name\n")
  department = input("Enter your department\n")
  designation = input("Enter your designation\n")
  joining_date = input("Enter your starting date [DD/MM/YYYY]\n")
  employee_status = input("Enter the employee status [Active/Inactive]\n")

  with open('database.csv', "a") as f:
     employee_info = ""
     employee_info += "%s," % employee_id
     employee_info += "%s," % name
     employee_info += "%s," % department
     employee_info += "%s," % designation
     employee_info += "%s," % joining_date
     employee_info += "%s," % employee_status
     employee_info += "\n"
     f.write(employee_info)


def inactive():
    print("Inactive Employee\n")
     employee_to_inactive = int(input("Enter your employee ID\n"))

     with open('database.csv', "r") as csv_file:
         csv_reader = csv.reader(csv_file, delimiter=',')
         full_list = list(csv_reader)

         rows = []
         rows.append(full_list[0])
         for item in range(1, len(full_list)):
             if int(full_list[item][0]) == employee_to_inactive:
                 full_list[item][5] = "Inactivate"
             rows.append(full_list[item])

     with open('database.csv', 'w') as f:
         writer = csv.writer(f, delimiter=',')
         writer.writerows(rows)



menu()
0 голосов
/ 13 марта 2019

Вы можете использовать библиотеку pandas.

Сначала вам нужно импортировать pandas и прочитать файл csv.

import pandas as pd
df = pd.read('/path/to/csv_file')

Поскольку каждый сотрудник будет иметь уникальный идентификатор сотрудника, вы можете использовать метод loc для изменения значения.

df.loc[df["Employee ID"]==12345, "Employee Status"] = "Inactive"

После внесения изменений сохраните его обратно в файл csv.

df.to_csv("/path/to/csv_file", index=False)

Проверьте этот стек Изменить определенное значение в файле CSV через Python

0 голосов
/ 13 марта 2019

CSV-файл - это последовательный текстовый файл.Это очень хороший формат обмена, потому что он не зависит от какой-либо физической системы.Но изменение одного значения в нем заканчивается изменением значения в текстовом файле.И кроме случаев, когда вы уверены, что новое значение будет иметь тот же размер, что и исходное (а Active и Inactive имеют разные размеры ...), единственный надежный способ - переписать весь файл.

Вы можете либо загрузить все в память, либо скопировать во временный файл, изменив конкретную строку, а затем переименовать временный файл в исходное имя.Вы должны найти примеры для этого в SO:

Кстати, если это CSV-файл, использование модуля CSV может быть полезным ...

0 голосов
/ 13 марта 2019

Только мои два цента. Полагаю, использовать INI-файл было бы проще.

[ID4711]
name = Person A
status = ACTIVE

[ID4712]
name = Person B
status = ACTIVE

[ID4713]
name = Person C
status = INACTIVE

код

import configparser

config = configparser.ConfigParser()
config.read('default.ini')
print(config['ID4711']['NAME'])
print(config['ID4711']['STATUS'])

config['ID4711']['STATUS'] = 'TEST'

with open('default.ini', 'w') as configfile:
    config.write(configfile)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...