Hướng dẫn how do you edit a csv file in python? - làm cách nào để chỉnh sửa tệp csv trong python?

Bây giờ tôi biết thường không khả thi để sửa đổi tệp CSV khi bạn đang đọc từ đó để bạn cần tạo một tệp CSV mới và ghi vào nó. Vấn đề tôi đang gặp phải là bảo tồn thứ tự ban đầu của dữ liệu.

Tệp CSV đầu vào trông giống như sau:

C1       C2         C3
apple    BANANA     Mango
pear     PineApple  StRaWbeRRy

Tôi muốn biến tất cả dữ liệu thành chữ thường và xuất một tệp CSV mới trông giống như:

C1       C2         C3
apple    banana     mango
pear     pineapple  strawberry

Cho đến nay tôi có thể lặp lại thông qua tệp CSV đầu vào và biến tất cả các giá trị thành chữ thường nhưng tôi không biết cách viết lại nó thành tệp CSV ở định dạng đó. Mã tôi có là:

def clean (input)
  aList = []
  file = open(input, "r")
  reader = csv.reader(file, delimiter = ',')
  next(reader, None) # Skip the header but I want to preserve it in the output csv file
  for row in reader:
     for col in row:
        aList.append(col.lower())

Vì vậy, bây giờ tôi có một danh sách với tất cả các dữ liệu viết thường, làm cách nào để viết lại nó thành một tệp CSV có cùng định dạng (cùng số lượng hàng và cột) như đầu vào bao gồm hàng tiêu đề mà tôi đã bỏ qua trong mã.

Cách đọc và ghi các tệp CSV bằng Python

Xin chào! Tôi là Greg Sadetsky và tôi dạy các lớp Python tại Protech. Hôm nay, chúng tôi sẽ thực hiện một chút chương trình Python. Hướng dẫn này được thiết kế cho bất kỳ ai quan tâm đến Python, không có kinh nghiệm nào và tò mò tìm hiểu những gì có thể với một vài kỹ năng lập trình cơ bản.

Bạn có thể xem hướng dẫn đầy đủ bên dưới hoặc bỏ qua các phần riêng lẻ, ngay sau bảng nội dung.

Mục lục:

  • Mở tệp CSV
  • Vòng qua các hàng
  • Trích xuất thông tin từ tệp CSV
  • Tạo danh sách
  • Chuyển đổi danh sách thành các bộ
  • Cuối cùng, xuất ra sự khác biệt giữa 2 bộ

Giới thiệu về Python cho người mới bắt đầu

Đây là một tình huống ví dụ: Bạn là người tổ chức một bữa tiệc và đã tổ chức sự kiện này trong hai năm. Bạn có các tệp CSV (giá trị phân tách dấu phẩy) cho cả hai năm liệt kê những người tham dự mỗi năm. Bạn muốn biết những người tham dự đã tham dự bash thứ hai, nhưng không phải là người đầu tiên.

Thiết lập môi trường cho việc đọc tệp CSV Python

Chúng tôi có một khởi đầu tuyệt vời! Err ... bạn đã cài đặt Python trên máy tính của mình chưa? Nếu bạn đang chạy theo Mac OS X, hãy mở ứng dụng thiết bị đầu cuối từ thư mục tiện ích và loại

def clean (input)
  aList = []
  file = open(input, "r")
  reader = csv.reader(file, delimiter = ',')
  next(reader, None) # Skip the header but I want to preserve it in the output csv file
  for row in reader:
     for col in row:
        aList.append(col.lower())
1Terminal application from the Utilities directory and type
def clean (input)
  aList = []
  file = open(input, "r")
  reader = csv.reader(file, delimiter = ',')
  next(reader, None) # Skip the header but I want to preserve it in the output csv file
  for row in reader:
     for col in row:
        aList.append(col.lower())
1

Người dùng Windows nên theo dõi bài viết này để cài đặt nó. Đề xuất của tôi sẽ là có được phiên bản 2.7 mới nhất (ví dụ 2,7.6).

Khi bạn đã chạy Python thực thi, bạn sẽ thấy một dòng bắt đầu với ba dấu hiệu lớn hơn. Nó sẽ trông giống thế này:

>>>

Điều đó thật tuyệt! Hãy thử một số arithmetics cơ bản, ví dụ gõ vào

def clean (input)
  aList = []
  file = open(input, "r")
  reader = csv.reader(file, delimiter = ',')
  next(reader, None) # Skip the header but I want to preserve it in the output csv file
  for row in reader:
     for col in row:
        aList.append(col.lower())
2 và nhấn phím Enter. Khi bạn đã thấy câu trả lời của trình thông dịch lại, bạn có thể thoát nó bằng cách nhập
def clean (input)
  aList = []
  file = open(input, "r")
  reader = csv.reader(file, delimiter = ',')
  next(reader, None) # Skip the header but I want to preserve it in the output csv file
  for row in reader:
     for col in row:
        aList.append(col.lower())
3 và nhấn Enter.

Mở tệp CSV với Python

Tạo một tệp văn bản mới trong trình soạn thảo yêu thích của bạn và đặt cho nó một tên hợp lý, ví dụ như new_attendees.py. Phần mở rộng .py là điển hình của các tệp chương trình Python.new_attendees.py. The .py extension is typical of Python program files.

Chúng tôi sẽ sử dụng các tệp dữ liệu CSV ví dụ sau (tất cả tên người tham dự và email được tạo ngẫu nhiên): người tham dự1.csv và người tham dự2.csv. Hãy tiếp tục và tải xuống các tập tin này vào máy tính của bạn. Đặt chúng trong cùng một thư mục trong đó tệp chương trình của bạn, new_attendees.py, sống.

Python cho phép bạn mở các tệp văn bản như thế này và đọc nội dung của chúng, tất cả cùng một lúc hoặc từng dòng. Trong trường hợp các tệp CSV, chúng tôi sẽ sử dụng một mô-đun tích hợp để Python sẽ đơn giản hóa việc phân tích cú pháp của chúng. Các mô -đun trong câu hỏi được gọi, đơn giản, CSV.csv.

Chúng tôi sẽ cần một vài điều để bắt đầu: Đầu tiên, vì chúng tôi sẽ sử dụng mô -đun CSV trong mã của chúng tôi, chúng tôi sẽ cần cho Python biết về điều này. Mặc dù Python cung cấp cho bạn một số mô-đun tích hợp, bạn cần khai báo rõ ràng những mô-đun nào bạn sẽ sử dụng. Điều này sẽ trở thành dòng đầu tiên của chương trình của chúng tôi:

import csv

Bây giờ chúng tôi đã sẵn sàng để viết phần còn lại của chương trình. Chúng tôi sẽ mở tệp CSV đầu tiên, lưu trữ tham chiếu đến tệp mở này dưới dạng

def clean (input)
  aList = []
  file = open(input, "r")
  reader = csv.reader(file, delimiter = ',')
  next(reader, None) # Skip the header but I want to preserve it in the output csv file
  for row in reader:
     for col in row:
        aList.append(col.lower())
4 và sau đó chuyển tham chiếu này đến mô -đun CSV. Cụ thể, hàm
def clean (input)
  aList = []
  file = open(input, "r")
  reader = csv.reader(file, delimiter = ',')
  next(reader, None) # Skip the header but I want to preserve it in the output csv file
  for row in reader:
     for col in row:
        aList.append(col.lower())
5 sẽ phân tích tệp mở và trả về một danh sách phân tích cú pháp các hàng. Đây là những gì nó muốn cho đến nay:


import csv
f = open('attendees1.csv')
csv_f = csv.reader(f)

Để chạy chương trình này, trong thiết bị đầu cuối của bạn, hãy vào thư mục chứa tệp chương trình Python và các tệp CSV của người tham dự và nhập

def clean (input)
  aList = []
  file = open(input, "r")
  reader = csv.reader(file, delimiter = ',')
  next(reader, None) # Skip the header but I want to preserve it in the output csv file
  for row in reader:
     for col in row:
        aList.append(col.lower())
6

Vòng lặp qua các hàng tệp CSV Python

Mặc dù mã ở trên là hợp lệ, nhưng nó hơi không thỏa mãn vì nó không xuất bất kỳ dữ liệu nào, khiến cho việc theo dõi một chút khó khăn ... hãy in ra các hàng có trong tệp CSV bằng cách lặp qua danh sách

def clean (input)
  aList = []
  file = open(input, "r")
  reader = csv.reader(file, delimiter = ',')
  next(reader, None) # Skip the header but I want to preserve it in the output csv file
  for row in reader:
     for col in row:
        aList.append(col.lower())
7.


import csv

f = open('attendees1.csv')
csv_f = csv.reader(f)

for row in csv_f:
  print row

Bạn sẽ thấy rằng chúng tôi đã thêm hai dòng - một dòng là vòng lặp xác định rằng đối với các dòng thụt sau đây, biến

def clean (input)
  aList = []
  file = open(input, "r")
  reader = csv.reader(file, delimiter = ',')
  next(reader, None) # Skip the header but I want to preserve it in the output csv file
  for row in reader:
     for col in row:
        aList.append(col.lower())
8 phải chứa từng phần tử từ danh sách và dòng thứ hai (được thụt vào, vì chúng tôi muốn dòng này là một phần của vòng lặp cho) sẽ in biến
def clean (input)
  aList = []
  file = open(input, "r")
  reader = csv.reader(file, delimiter = ',')
  next(reader, None) # Skip the header but I want to preserve it in the output csv file
  for row in reader:
     for col in row:
        aList.append(col.lower())
8 này.for loop which defines that for the following indented lines, the
def clean (input)
  aList = []
  file = open(input, "r")
  reader = csv.reader(file, delimiter = ',')
  next(reader, None) # Skip the header but I want to preserve it in the output csv file
  for row in reader:
     for col in row:
        aList.append(col.lower())
8 variable should contain each element from the list, and the second line (indented, since we want this line to be part of the for loop) which will print this
def clean (input)
  aList = []
  file = open(input, "r")
  reader = csv.reader(file, delimiter = ',')
  next(reader, None) # Skip the header but I want to preserve it in the output csv file
  for row in reader:
     for col in row:
        aList.append(col.lower())
8 variable.

Chúng ta nhận được gì? Sắc đẹp!


['Jackson', 'Thompson', '']
['Luke', 'Wallace', '']
['David', 'Wright', '']
['Nathaniel', 'Butler', '']
['Noah', 'Simpson', '']
['Eli', 'Mitchell', '']
...

Danh sách này nên tiếp tục. Vâng, đó là danh sách những người tham dự từ tệp tham dự1.csv! Hoan hô!

Trích xuất thông tin từ tệp CSV Python

Mỗi hàng mà chúng tôi đang lặp lại quá mức một đối tượng danh sách (____ 27 là danh sách các danh sách). Chúng ta có thể thấy các danh sách này (tương ứng với các hàng trong tệp CSV của người tham dự) được tạo thành từ ba yếu tố, thứ ba là địa chỉ e-mail mà chúng tôi muốn sử dụng để so sánh người tham dự.

Trong Python, dấu ngoặc vuông được sử dụng để truy cập một phần tử nằm ở một vị trí nào đó ("index") trong danh sách. Cụ thể, đối với danh sách

>>>
1 chứa
>>>
2, chúng tôi sẽ viết
>>>
3 để truy cập phần tử đầu tiên của nó (danh sách Python được chỉ số 0, giống như trong nhiều ngôn ngữ lập trình khác-xem điều này). Tất cả cùng nhau, như một ví dụ khác, để in yếu tố "thứ 2" (trong con người) của danh sách, bạn sẽ viết:


new_list = ['red, 'green', 'blue']
print new_list[1]

Điều này nên in ra màu xanh lá cây.green.

Quay lại tệp CSV người tham dự của chúng tôi, để in ra địa chỉ e-mail của mỗi người tham dự, chúng tôi sẽ sửa đổi mã một chút để nhận được:


import csv

f = open('attendees1.csv')
csv_f = csv.reader(f)

for row in csv_f:
  print row[2]

Chạy mã này và bạn sẽ xem địa chỉ e-mail của mỗi người tham dự được in ra. Hầu như ở đó!

Tạo danh sách cho các tệp CSV trong Python

Chúng tôi đã thành công trong việc truy cập và in địa chỉ e-mail từ mỗi hàng trong tệp CSV. Bây giờ chúng ta hãy tạo một đối tượng danh sách trống mà chúng ta sẽ điền với các địa chỉ e-mail đó. Điều này, một lần nữa, là cho phép chúng tôi so sánh những người tham dự năm thứ nhất với năm thứ hai.

Điều đầu tiên trước tiên - hãy tạo một danh sách trống. Một danh sách trống được gán cho một biến bằng cách viết như sau:

C1       C2         C3
apple    banana     mango
pear     pineapple  strawberry
0

Để nối các phần tử vào danh sách này (vì một cái trống sẽ không được sử dụng nhiều), chúng tôi sẽ sử dụng phương thức ____34 của danh sách. Xem xét danh sách được tạo ở trên, nối thêm một chuỗi vào nó sẽ xem xét điều này:

C1       C2         C3
apple    banana     mango
pear     pineapple  strawberry
1

Nó có hoạt động không? Chúng tôi có thể xác minh bằng cách in đối tượng danh sách:

C1       C2         C3
apple    banana     mango
pear     pineapple  strawberry
2

Chúng ta nên xem:

C1       C2         C3
apple    banana     mango
pear     pineapple  strawberry
3

tức là, một danh sách với một yếu tố trong đó! Tuyệt quá! Sửa đổi mã mà chúng tôi đã làm việc cho đến nay cung cấp cho chúng tôi điều này:

C1       C2         C3
apple    banana     mango
pear     pineapple  strawberry
4

Sau khi chạy, mã này sẽ in một danh sách duy nhất (sẽ xuất hiện dưới dạng một dòng dài, duy nhất) với tất cả các email của người tham dự. Có gì thiếu không? Chà, mã trên chỉ chạy trên những người tham dự từ bên đầu tiên của năm đầu tiên (vì chúng tôi chỉ đọc tệp tham dự1.csv). Chúng ta nên thực hiện xử lý tương tự (nghĩa là, trích xuất các địa chỉ e-mail) trên tệp thứ hai.

Để giữ cho ví dụ này đơn giản, chúng tôi đã quyết định sao chép mã xử lý tệp tham dự1.csv và thực hiện gần như các hoạt động tương tự cho người tham dự2.csv. Một lời cảnh báo! Sao chép và dán mã như chúng tôi sẽ làm dưới đây được coi là thực hành xấu. Chúng tôi đang làm điều đó ở đây để giữ cho mã có thể đọc được - cách điển hình và tốt hơn sẽ là loại bỏ những gì phổ biến cho mã được sao chép/dán và đặt mã đó vào một khối có thể tái sử dụng (một hàm). Vì vậy, hãy nhớ rằng chúng tôi đang hy sinh chất lượng mã để dễ hiểu.A word of warning! Copying & Pasting code as we'll do below is considered bad practice. We're doing it here to keep the code readable -- the typical and better way would be to take out what's common to the code that's being copied/pasted and to put that code into a reusable block (a function). So, do keep in mind that we're sacrificing code quality for ease of understanding.

Sau khi được sửa đổi, mã ở trên bây giờ thực hiện các bước tương tự cho cả người tham dự1.csv và người tham dự.

C1       C2         C3
apple    banana     mango
pear     pineapple  strawberry
5

Chuyển đổi danh sách thành các bộ cho tệp CSV Python

Hai bước nữa còn lại. Trước tiên chúng tôi sẽ chuyển đổi các danh sách chúng tôi có (

>>>
5 và
>>>
6) thành các bộ. Một tập hợp là một kiểu dữ liệu giống như một danh sách, trong đó nó lưu trữ một số đối tượng, nhưng với sự khác biệt mà các đối tượng không được đặt hàng và tất cả các đối tượng chứa đều có duy nhất. Vì vậy, một tập hợp có thể chứa 2, 5, 4 (không theo thứ tự cụ thể) nhưng không phải 2, 2, 4, 6, 6 vì các bộ chỉ chứa các giá trị duy nhất.2, 5, 4 (in no particular order) but not 2, 2, 4, 6, 6 since sets only contain unique values.

Bằng cách chuyển đổi danh sách của chúng tôi thành các bộ, chúng tôi sẽ có khả năng so sánh các giá trị của hai danh sách. Để chuyển đổi danh sách thành một tập hợp, chỉ cần chuyển danh sách sang hàm set (). Do đó:set() function. Thus:

C1       C2         C3
apple    banana     mango
pear     pineapple  strawberry
6

... sẽ dẫn đến đầu ra sau:

C1       C2         C3
apple    banana     mango
pear     pineapple  strawberry
7

Bạn có thể nhận thấy rằng giá trị 5 chỉ xuất hiện một lần trong tập hợp của chúng tôi, mặc dù nó có mặt hai lần trong my_list. Việc thêm các hoạt động chuyển đổi đã đặt vào mã của chúng tôi cung cấp cho chúng tôi:5 appears only once in our set, although it was present twice in my_list. Adding the set conversion operations to our code gives us:

C1       C2         C3
apple    banana     mango
pear     pineapple  strawberry
8

Xuất ra sự khác biệt giữa 2 bộ

Một bước cuối cùng! Chúng tôi đã tạo ra các bộ trong số các địa chỉ e-mail của người tham dự cụ thể để so sánh chúng. Hãy làm điều đó! Bộ hỗ trợ nhiều hoạt động, một trong số đó sẽ cho chúng tôi biết các yếu tố nào của một bộ không có trong một bộ khác. Hãy thử một ví dụ đơn giản bằng cách tạo hai bộ:

C1       C2         C3
apple    banana     mango
pear     pineapple  strawberry
9

Đúng như dự đoán, kết quả phải là 1, 7, 8, 9. Lưu ý rằng thứ tự mà các yếu tố kết quả này xuất hiện có thể trông khác nhau - điều này là do các bộ không được đặt hàng.1, 7, 8, 9. Note that the order in which these resulting elements appear might look different -- this is because sets are unordered.

Chúng tôi thấy rằng việc gọi phương thức

>>>
7 thực hiện những gì chúng tôi muốn làm với địa chỉ e-mail của người tham dự! Vì vậy, không có gì khó chịu, chúng ta hãy tiếp tục và xác định ai đã tham dự bữa tiệc thứ hai và không có mặt ở lần đầu tiên!

def clean (input)
  aList = []
  file = open(input, "r")
  reader = csv.reader(file, delimiter = ',')
  next(reader, None) # Skip the header but I want to preserve it in the output csv file
  for row in reader:
     for col in row:
        aList.append(col.lower())
0

Bạn sẽ thấy một bộ 19 địa chỉ e-mail được in ra. Chúng ta làm được rồi! Bravo! Bất kỳ câu hỏi? Vui lòng hỏi dưới đây.

Muốn tìm hiểu thêm?

Protech cung cấp đào tạo Python riêng, được giao tại chỗ hoặc trực tuyến cho các nhóm từ 4 trở lên, cũng như các lớp học mở cửa cho công chúng:

  • Các khóa đào tạo Python
  • Lịch học lớp công khai

Làm cách nào để cập nhật tệp CSV hiện có trong Python?

Làm cách nào để nâng cấp tệp CSV bằng Pandas ?..
Tải CSV vào DataFrame: Nhập Pandas dưới dạng PD. ....
In DataFrame mà không cần phương thức TO_STRING (): Nhập Pandas dưới dạng PD ..
Kiểm tra số lượng hàng tối đa đã trả lại: nhập pandas dưới dạng pd ..
Tăng số lượng hàng tối đa để hiển thị toàn bộ DataFrame: Nhập Pandas dưới dạng PD ..

Làm cách nào để chỉnh sửa dữ liệu trong tệp CSV?

Mở tệp CSV bằng cách sử dụng trình hướng dẫn nhập văn bản..
Đảm bảo loại dữ liệu được đặt thành phân đoạn.Nhấn tiếp..
Đặt dấu phân cách thành dấu phẩy (chỉ) và tab bỏ chọn.Nhấn tiếp..
Đối với mỗi cột, đặt định dạng dữ liệu thành văn bản, thay vì chung.Để làm điều này một cách nhanh chóng, bạn có thể chọn tất cả các cột cùng một lúc ..

Làm cách nào để chỉnh sửa văn bản trong tệp CSV?

Chỉnh sửa dữ liệu trong tệp CSV..
Thêm một tiêu đề (phải là phải!).
Chèn hàng và/hoặc cột nếu bạn cần thêm dữ liệu vào tệp của mình ..
Áp dụng bộ lọc hoặc sắp xếp dữ liệu của bạn để điều hướng nhanh các điểm dữ liệu cụ thể ..
Tìm kiếm và thay thế nếu bạn cần sửa các giá trị dữ liệu ..
và như thế!.

Làm cách nào để chỉnh sửa tệp CSV trong gấu trúc?

Chúng ta có thể sửa đổi tệp CSV này bằng cách sử dụng gấu trúc bằng cách thay đổi một số giá trị ô.Đối với điều đó, chúng ta cần nhập tệp CSV vào DataFrame trước tiên. Sau đó chúng ta có thể thay đổi các giá trị ô bằng cách chọn chúng bằng nhãn hàng/cột hoặc theo vị trí chỉ mục.Ví dụ: chúng ta có thể thay đổi giá trị của ô ở hàng 'C' và cột 'tuổi' thành 56, tức làimport a CSV file to a DataFrame first. Then we can change cell values by selecting them either by row/column labels or by index positions. For example, we can change the value of the cell at row 'c' and column 'Age' to 56 i.e.