Hướng dẫn how do you write data in a specific column in a csv file in python? - làm cách nào để bạn ghi dữ liệu vào một cột cụ thể trong tệp csv trong python?

Trong khi sử dụng Python và Pandas, tôi đang chạy một tập lệnh phân tích các tệp TXT cho điểm số từ và điểm số Lexile. Tôi có thể chạy thành công kịch bản và viết cho CSV. Tuy nhiên, đầu ra của tôi mang lại các giá trị bất ngờ và tôi gặp khó khăn khi viết dữ liệu vào cột cụ thể.

Đây là mã:

import pandas as pd
import textstat
import csv

header = ["word_count", "flech"]

with open('data.csv', 'w', encoding='UTF8') as f:
    writer = csv.writer(f)

    writer.writerow(header)
    
for text_number in range(0, 2):

    f = open(f'\TXTs\text_{text_number}.txt', 'r')

    if f.mode == 'r':
        contents = f.read()
        
    text_data = (contents)

    word_count = textstat.lexicon_count(text_data, removepunct=True)
    flech = textstat.flesch_kincaid_grade(text_data)
   
    wc = pd.DataFrame([word_count])
    fl = pd.DataFrame([flech])
    
    def wc_count():
        wc.to_csv('output.csv', mode="a", header="word_count", index=False)
        
    def fl_count():
        fl.to_csv('output.csv', mode="a", header="flech", index=False)

    wc_count()
    fl_count()

Tôi muốn đầu ra trông như thế này, với các giá trị

word_count, flech
    
0   
2   
0   
-3.1    
0   
271 
0   
13  
5 &
word_count, flech
    
0   
2   
0   
-3.1    
0   
271 
0   
13  
6 trong cột "Word_Count" và
word_count, flech
    
0   
2   
0   
-3.1    
0   
271 
0   
13  
7 và
word_count, flech
    
0   
2   
0   
-3.1    
0   
271 
0   
13  
8 trong cột "frech":

word_count, flech
2, -3.1
271, 13

Tuy nhiên, đầu ra được tạo ra trông như thế này:

word_count, flech
    
0   
2   
0   
-3.1    
0   
271 
0   
13  

Rõ ràng, tôi đã gặp một số vấn đề với đầu ra của mình. Bất kỳ sự trợ giúp nào cũng sẽ được đánh giá cao.

Ví dụ hoàn chỉnh như sau, csv.reader and csv.DictWriter classes. A part from appending the columns we will also discuss how to insert columns in between other columns of the existing CSV file.

Trong bài viết này, chúng tôi sẽ thảo luận về cách thêm một cột vào tệp CSV hiện có bằng các lớp CSV.Reader và CSV.DictWriter. Một phần từ việc thêm các cột, chúng tôi cũng sẽ thảo luận về cách chèn các cột ở giữa các cột khác của tệp CSV hiện có.we have a csv module that provides different classes for reading and writing csv files. All the reading and writing operations provided by these classes are row specific. But we can build our logic on top of these functions to add or append columns in a csv file. Let’s see how to do that,

Không có chức năng trực tiếp trong Python để thêm một cột trong tệp CSV. Mặc dù trong Python, chúng tôi có một mô -đun CSV cung cấp các lớp khác nhau để đọc và viết các tệp CSV. hoặc nối các cột trong tệp CSV. Hãy để xem cách làm điều đó,

Thêm một cột có cùng giá trị vào tệp CSV hiện cóinput.csv and its contents are,

21,Mark,Python,London,Morning
22,John,Python,Tokyo,Evening
23,Sam,Python,Paris,Morning
24,Ritika,Python,Delhi,Evening
25,Shaun,Python,Colombo,Morning

Giả sử chúng ta có một tệp CSV, tức là input.csv và nội dung của nó là,‘Some Text‘.

Bây giờ chúng tôi muốn thêm một cột trong tệp CSV này và tất cả các mục trong cột này sẽ chứa cùng một giá trị, tức là một số văn bản.

Hãy để xem cách làm điều đó,Whereas, csv.writer class in python’s csv module provides a mechanism to write a list as a row in the csv file.

Lớp CSV.Reader trong mô -đun CSV của Python cung cấp một cơ chế để đọc từng hàng trong tệp CSV dưới dạng danh sách.

Quảng cáo

  • Các bước sẽ được nối một cột trong tệp CSV,
  • Mở tệp ‘input.csv ở chế độ đọc và tạo đối tượng CSV.Reader cho tệp CSV này
  • Mở tệp ’unput.csv ở chế độ ghi và tạo đối tượng CSV.Writer cho tệp CSV này
    • Sử dụng đối tượng Reader, hãy đọc dòng tệp ‘Input.csv, từng dòng
    • Đối với mỗi hàng (đọc dưới dạng danh sách), hãy nối văn bản mặc định trong danh sách.
  • Đóng cả tệp input.csv và đầu ra.csv.

Mã như sau,

from csv import writer
from csv import reader

default_text = 'Some Text'
# Open the input_file in read mode and output_file in write mode
with open('input.csv', 'r') as read_obj, \
        open('output_1.csv', 'w', newline='') as write_obj:
    # Create a csv.reader object from the input file object
    csv_reader = reader(read_obj)
    # Create a csv.writer object from the output file object
    csv_writer = writer(write_obj)
    # Read each row of the input csv file as list
    for row in csv_reader:
        # Append the default text in the row / list
        row.append(default_text)
        # Add the updated row / list to the output file
        csv_writer.writerow(row)

Nó nối thêm cột trong nội dung của Input.csv và lưu các thay đổi dưới dạng tệp output_1.csv. Nội dung của tệp Output_1.csv là,Contents of output_1.csv file are,

21,Mark,Python,London,Morning,Some Text
22,John,Python,Tokyo,Evening,Some Text
23,Sam,Python,Paris,Morning,Some Text
24,Ritika,Python,Delhi,Evening,Some Text
25,Shaun,Python,Colombo,Morning,Some Text

Thêm cột trong CSV dựa trên logic tùy chỉnh

Trong ví dụ trên, chúng tôi đã thêm một cột có cùng một giá trị trong tệp CSV. Nhưng có thể có các kịch bản khác, như,

  • Cách thêm cột trong tệp CSV dựa trên một số logic khác, & nbsp; trong đó mỗi giá trị trong cột là & nbsp; khác nhau ?
  • Làm thế nào để thêm danh sách dưới dạng cột trong tệp CSV?
  • Làm thế nào để thêm cột trong tệp CSV với tiêu đề?
  • Cách chèn các cột ở giữa các cột khác của tệp CSV.

Chúng tôi có thể thay đổi mã nhỏ trong ví dụ trên, cho mỗi kịch bản của chúng tôi nhưng điều đó sẽ là quá nhiều sao chép mã.

Vì vậy, hãy tạo một hàm chung sẽ thực hiện phần phổ biến nhất để thêm một cột trong tệp CSV, tức là.

from csv import writer
from csv import reader

def add_column_in_csv(input_file, output_file, transform_row):
    """ Append a column in existing csv using csv.reader / csv.writer classes"""
    # Open the input_file in read mode and output_file in write mode
    with open(input_file, 'r') as read_obj, \
            open(output_file, 'w', newline='') as write_obj:
        # Create a csv.reader object from the input file object
        csv_reader = reader(read_obj)
        # Create a csv.writer object from the output file object
        csv_writer = writer(write_obj)
        # Read each row of the input csv file as list
        for row in csv_reader:
            # Pass the list / row in the transform function to add column text for this row
            transform_row(row, csv_reader.line_num)
            # Write the updated row / list to the output file
            csv_writer.writerow(row)

Hàm này có 3 đối số,

  • & nbsp; & nbsp; & nbsp; & nbsp;input_file: file path / name of the input csv file, it will read the contents of this csv file
  • & nbsp; & nbsp; & nbsp; & nbsp; output_file: đường dẫn / tên của tệp CSV đầu ra, nó sẽ viết nội dung sửa đổi trong tệp CSV nàyoutput_file: file path / name of the output csv file, it will write modified contents in this csv file
  • & nbsp; & nbsp; & nbsp; & nbsp; transform_row: một chức năng gọi lại, nhận danh sách và sửa đổi danh sách đótransform_row: A callback function, that receives a list and modifies that list

Hàm này lặp lại trên mỗi hàng của input_file và đọc nội dung của mỗi hàng dưới dạng danh sách. Sau đó, nó chuyển & nbsp; liệt kê vào hàm Transform_row () để sửa đổi. Ở bên cạnh cuộc gọi lại này, chúng tôi có thể sửa đổi danh sách như thêm một mục nhập trong đó. & NBSP; sau đó nó lưu hàng / danh sách sửa đổi trong output_file.that list into a transform_row() function for modification. In side this callback we can modify the list like add an entry in it. Then it saves the modified row / list in the output_file.

Trong đối số Transform_row của hàm này, chúng tôi sẽ chủ yếu vượt qua chức năng Lambda trong các ví dụ của chúng tôi.

Vì vậy, hãy để sử dụng chức năng này để giải quyết các vấn đề của chúng tôi,

Thêm một cột có cùng giá trị vào tệp CSV hiện có bằng Chức năng chung & Lambda

Chúng tôi đã làm tương tự trong ví dụ đầu tiên của chúng tôi, nhưng hãy để Lừa làm lại bằng cách sử dụng chức năng chung của chúng tôi và một lambda, tức là.

default_text = 'Some Text'

# Add column with same text in all rows
add_column_in_csv('input.csv', 'output_2.csv', lambda row, line_num: row.append(default_text))

Nó nối thêm cột trong nội dung của Input.csv và lưu các thay đổi dưới dạng tệp output_2.csv. Nội dung của tệp Output_2.csv là,input.csv and saved the changes as output_2.csv file. Contents of output_2.csv file are,

21,Mark,Python,London,Morning,Some Text
22,John,Python,Tokyo,Evening,Some Text
23,Sam,Python,Paris,Morning,Some Text
24,Ritika,Python,Delhi,Evening,Some Text
25,Shaun,Python,Colombo,Morning,Some Text

Thêm một cột vào tệp CSV hiện có, dựa trên các giá trị từ các cột khác

Hãy để nối một cột trong tệp input.csv bằng cách hợp nhất giá trị của các cột thứ nhất và thứ hai, tức là.

# Add column to csv by merging contents from first & second column of csv
add_column_in_csv('input.csv', 'output_3.csv', lambda row, line_num: row.append(row[0] + '__' + row[1]))

Trong hàm Lambda, chúng tôi đã nhận được từng hàng dưới dạng danh sách và số dòng. Sau đó, nó đã thêm một giá trị trong danh sách và giá trị là sự hợp nhất của giá trị thứ nhất và thứ hai của danh sách.

Nó đã thêm cột trong nội dung của Input.csv bằng cách hợp nhất giá trị của cột thứ nhất và thứ hai và sau đó lưu các thay đổi dưới dạng tệp output_3.csv.and then saved the changes as output_3.csv file.

Nội dung của tệp output_3.csv là,

word_count, flech
2, -3.1
271, 13
0

Thêm danh sách làm cột vào tệp CSV hiện có

Giả sử chúng ta có một danh sách chuỗi, tức là.

word_count, flech
2, -3.1
271, 13
1

Hãy để thêm danh sách các chuỗi này làm cột cuối cùng trong tệp input.csv và lưu nội dung của nó dưới dạng output_4.csv,

word_count, flech
2, -3.1
271, 13
2

Trong hàm Lambda, chúng tôi đã nhận được từng hàng dưới dạng danh sách và số dòng. Sau đó, nó đã thêm một giá trị trong danh sách và giá trị là một mục từ list_of_str của chúng tôi tại index & nbsp; line_num - 1.list_of_str at index  line_num – 1.

Do đó, tất cả các mục trong list_of_strare được thêm vào làm cột trong CSV.list_of_strare added as a column in the csv.

Nội dung của tệp output_4.csv là,

word_count, flech
2, -3.1
271, 13
3

Chèn một cột là cột thứ hai có cùng giá trị vào CSV hiện có

Trong tất cả các ví dụ trên, chúng tôi đã thêm một cột ở cuối tệp CSV, tức là cột cuối cùng. Điều gì sẽ xảy ra nếu chúng ta muốn chèn một cột & nbsp; giữa các cột khác của tệp CSV? Hãy để xem cách làm điều đó,column in between other columns of the csv file ? Let’s see how to do that,

Chèn một cột vào tệp input.csv làm cột thứ hai và lưu nội dung của nó vào tệp output_5.csv,

word_count, flech
2, -3.1
271, 13
4

Nội dung của tệp Output_5.csv là,

word_count, flech
2, -3.1
271, 13
5

Trong hàm Lambda, chúng tôi đã nhận được từng hàng dưới dạng danh sách và số dòng. Sau đó, nó chèn giá trị ở vị trí cuối danh sách.

Thêm một cột có cùng giá trị vào tệp CSV hiện có với tiêu đề

Trong tất cả các ví dụ trên, chúng tôi đã thêm cột trong một tệp CSV mà không có tiêu đề nào. Nếu tệp CSV của chúng tôi cũng có tiêu đề, & nbsp;If our csv file has a header too, 

word_count, flech
2, -3.1
271, 13
6

Sau đó, hãy để xem cách thêm một cột mới với tiêu đề và giá trị, tức là.

word_count, flech
2, -3.1
271, 13
7

Trong hàm Lambda, nó nhận được hàng dưới dạng danh sách và số dòng của nó dưới dạng đối số. Sau đó kiểm tra xem line_num là 1, thì nó có nghĩa là danh sách này chứa tên cột và nó thêm tên của cột trong đó. Trong khi đó, nếu line_num không phải là 1 thì nó có nghĩa là một hàng tệp CSV bình thường của nó, nếu thêm mục nhập của cột mới trong đó.line_num is 1, then it means this list contains column names and it adds the name of column in it. Whereas, if line_num is not 1 then it means its a normal row of csv file, if adds the entry of new column in it.

Vì vậy, nó đã thêm một cột mới với các giá trị ‘giống nhau_text và tiêu đề‘ địa chỉ. Sau đó lưu nội dung đó dưới dạng output_6.csv,

Nội dung của tệp output_6.csv là,

word_count, flech
2, -3.1
271, 13
8

Sử dụng DicTreader Dictwriter để thêm một cột trong tệp CSV hiện có

Mô -đun CSV của Python cung cấp hai lớp khác để đọc và viết nội dung trong tệp CSV, tức là DicTreader & Dictwriter. & NBSP; Nó thực hiện tất cả các hoạt động bằng cách sử dụng từ điển thay vì danh sách.It performs all the operations using dictionaries instead of lists.

Chúng tôi đã tạo một chức năng riêng biệt để thêm cột vào tệp CSV, tương tự như trước đó nhưng nó sử dụng lớp dictreader & nbsp; & nbsp; và dictwriter thay thế, thay vào đó, thay vào đó and DictWriter class instead,

word_count, flech
2, -3.1
271, 13
9

Trong chức năng này, chúng ta cần vượt qua một cuộc gọi lại bổ sung tansform_column_names, nó nhận được danh sách các tên cột và & nbsp; chúng ta có thể sửa đổi nó dựa trên ý định của chúng ta.we can modify that based on our intent.

Hãy để xem cách sử dụng chức năng này để giải quyết các vấn đề của chúng tôi,

Sử dụng DicTreader Dictwriter để thêm một cột có cùng giá trị vào CSV hiện có

word_count, flech
    
0   
2   
0   
-3.1    
0   
271 
0   
13  
0

Nội dung của tệp output_7.csv là,

word_count, flech
2, -3.1
271, 13
8

Sử dụng DicTreader Dictwriter để chèn một cột làm cột thứ hai trong CSV CSV

word_count, flech
    
0   
2   
0   
-3.1    
0   
271 
0   
13  
2

Nội dung của tệp output_7.csv là,

word_count, flech
    
0   
2   
0   
-3.1    
0   
271 
0   
13  
3

Sử dụng DicTreader Dictwriter để chèn một cột làm cột thứ hai trong CSV CSV

word_count, flech
    
0   
2   
0   
-3.1    
0   
271 
0   
13  
4