AI-Assisted Development
Introduction to AI Assisted Development
A Quick Look GitHub Copilot
In this article, we explore GitHub Copilot—a powerful extension for Visual Studio Code—that assists you in developing a small CSV Reader application using Python. We cover setting up your project environment, scaffolding the application, reading and processing a CSV file, and even generating unit tests. GitHub Copilot helps both beginners and seasoned developers write less repetitive code and focus on solving problems.
Getting Started
GitHub Copilot provides intelligent code suggestions and generates boilerplate code to speed up development. To begin, install the GitHub Copilot extension in Visual Studio Code. Once installed, you will notice a "ready" status in the lower right-hand corner along with an integrated chat interface for code assistance.
For example, if you ask, "How do I create a new Python app?" Copilot might suggest these steps:
mkdir my_python_app
cd my_python_app
python3 -m venv venv
source venv/bin/activate
# app.py
def main():
print("Hello, World!")
if __name__ == "__main__":
main()
pip install requests
python app.py
You can activate Copilot’s inline help by pressing Command+I (or Control+I on Windows/Linux) and entering your prompt. Experimenting in the terminal is highly encouraged!
Creating a Python Virtual Environment and Application File
Open your terminal in Visual Studio Code and create your project directory with a dedicated virtual environment:
mkdir my_python_app
cd my_python_app
python3 -m venv venv
source venv/bin/activate
Next, create your main Python file:
touch main.py
As you start writing code in main.py
, GitHub Copilot will offer contextual suggestions and help scaffold the basic structure of your application.
Building the CSV Reader Application
GitHub Copilot might initially scaffold a simple Python application that prints a greeting. For example:
import argparse
def main():
parser = argparse.ArgumentParser(description="Your application description")
# Add your arguments here
args = parser.parse_args()
# TODO: Implement your application logic
print("Hello, World!")
if __name__ == "__main__":
main()
After confirming that the base application works (by running python main.py
), you can extend it to read a CSV file.
Creating a Sample CSV File
Create a CSV file named data.csv
with the following sample data:
first_name,last_name,ip_address,city,state
John,Doe,192.168.1.1,New York,NY
Jane,Smith,192.168.1.2,Los Angeles,CA
Bob,Johnson,192.168.1.3,Chicago,IL
Alice,Williams,192.168.1.4,Houston,TX
Michael,Brown,192.168.1.5,Phoenix,AZ
Reading the CSV File
Enhance your Python application by adding a function to read the CSV file. The following example, suggested by GitHub Copilot, demonstrates how to do this:
import argparse
# Function to open a CSV file and read the data
def read_csv(file_path):
with open(file_path, 'r') as file:
data = file.readlines()
return data
def main():
parser = argparse.ArgumentParser(description="Your application description")
# Add an argument for the CSV file path
parser.add_argument('csv_file', type=str, help='Path to the CSV file')
args = parser.parse_args()
# Read the CSV file argument
csv_file = args.csv_file
print(csv_file)
# Read and print the CSV file content
data = read_csv(csv_file)
for line in data:
print(line.strip())
if __name__ == "__main__":
main()
Execute the application using the command below:
python main.py data.csv
This command displays the contents of the CSV file in your terminal.
Processing CSV Data
To improve the output, the application can be modified to display only the first and last names from each record (excluding the header). Update your code as follows:
import argparse
# Function to open a CSV file and read the data
def read_csv(file_path):
with open(file_path, 'r') as file:
data = file.readlines()
return data
def main():
parser = argparse.ArgumentParser(description="Your application description")
parser.add_argument('csv_file', type=str, help='Path to the CSV file')
args = parser.parse_args()
csv_file = args.csv_file
print(csv_file)
# Read and print the CSV file content
data = read_csv(csv_file)
# Skip the header row and print first and last names
for line in data[1:]:
fields = line.strip().split(',')
print(f"{fields[0]} {fields[1]}")
if __name__ == "__main__":
main()
When you run the code, your terminal output should display:
(venv) $ python main.py data.csv
data.csv
John Doe
Jane Smith
Bob Johnson
Alice Williams
Michael Brown
Debugging and Enhancing with Copilot
Note
If you encounter errors such as an undefined attribute (e.g., "AttributeError: 'Namespace' object has no attribute 'csv_file'"), GitHub Copilot can help diagnose and fix these issues by suggesting the correct argument definitions.
Simply add the missing argument definition, and Copilot will adjust the code accordingly.
Generating Unit Tests
GitHub Copilot can also assist by generating unit tests for your code. The following is an example test file (test_main.py
) for the read_csv
function:
import os
import unittest
from main import read_csv
class TestReadCSV(unittest.TestCase):
def setUp(self):
# Create a temporary CSV file
self.test_csv_file = 'test.csv'
with open(self.test_csv_file, 'w') as file:
file.write('header1,header2\n')
file.write('row1col1,row1col2\n')
file.write('row2col1,row2col2\n')
def tearDown(self):
# Remove the temporary CSV file
os.remove(self.test_csv_file)
def test_read_csv(self):
"""
Test that the read_csv function correctly reads the CSV file.
"""
expected_data = [
'header1,header2\n',
'row1col1,row1col2\n',
'row2col1,row2col2\n'
]
actual_data = read_csv(self.test_csv_file)
self.assertEqual(actual_data, expected_data)
if __name__ == '__main__':
unittest.main()
To run the tests, execute:
python -m pytest
A successful test run will confirm that all tests have passed.
Conclusion
In this article, we demonstrated how GitHub Copilot can streamline your development process by helping you:
• Scaffold a new Python application
• Set up and work within a virtual environment
• Read and process CSV file data effectively
• Troubleshoot errors with contextual code suggestions
• Generate boilerplate unit tests automatically
GitHub Copilot enhances productivity for both beginners and experienced developers by saving time on repetitive code tasks. Next, explore Cursor—a fork of Visual Studio Code offering a uniquely enhanced IDE experience.
Happy coding!
Watch Video
Watch video content