CSV 文件

CSV,全称为 Comma-Separated Values)(逗号分隔值 ),是一种常用的文本文件格式 ,用于存储表格数据 ,如电子表格数据库 。它采用纯文本形式,以逗号作为字段之间的分隔符,每行表示一个数据记录。每行文本包含由逗号分隔的一个或多个字段。这些字段通常代表表格中的列。CSV文件具有简单、通用和易于处理的特点,在数据处理和数据交换方面被广泛应用。

CSV文件结构

CSV文件由多行组成,每行表示一个数据记录。每行中的字段使用逗号进行分隔,字段之间可以包含文本、数字或日期等数据。文件的第一行通常用于定义字段名,后续行则包含相应的数据值。字段值可以使用引号双引号 进行包裹,以处理包含逗号或换行符的复杂数据。

python 复制代码
# -*- coding: UTF-8 -*-
''' grade0.csv
20170110,刘兴怡,Female,B
20170109,刘春燕,Female,B
20170106,周思云,Female,B
20170115,张铭武,Male,A
20170102,徐芳,Female,A
20170113,田益宾,Male,A
20170101,章阳,Male,A
20170112,胡瑞欣,Female,A
'''


def csv_to_lst(filename):
    """接收文件名为参数,读取数据到二维列表中,返回二维列表。形如
    [['20170101', '章阳', 'Male', 'A'],... ['20170108', '刘忆宁', 'Male', 'E']]
    """
    with open(filename, 'r', encoding="gbk") as f:
        grade_in_lst = [line.strip().split(',') for line in f]  # 逐行切分为列表,得到二维列表
    return grade_in_lst


def sort_lst(list_name, n):
    """接收需要排序的二维列表名和整数的排序列序号(范围为:1,2,3,4)为参数,返回排序后的二维列表。"""
    list_name.sort(key=lambda x: x[n - 1])  # 列序号从1开始,列表中的序列从0开始,排序依据用x[n - 1]
    return list_name                        # 返回排序后的列表


def output(ls):
    """接收排序后的二维列表为参数,逐行输出,每行的元素间用制表符分隔。"""
    for line in ls:             # line 为子列表
        print(*line, sep='\t')  # *对子列表进行解包,得到多个元素,sep指定分隔符

import csv

# 创建并写入CSV文件
def create_csv():
    with open('example.csv', 'w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(["Name", "Age", "City"])
        writer.writerow(["Alice", 30, "New York"])
        writer.writerow(["Bob", 25, "Los Angeles"])

    print("CSV file 'example.csv' created and written successfully.")

def save_ls_csv(ls):
    with open('sort_lst_csv.csv', 'w', newline ='') as file:
        writer = csv.writer(file)
        #for line in ls:
        #    writer.writerow(line)
        writer.writerows(ls)
    print("CSV file 'sort_lst_csv.csv' created and written successfully.")

def pandas_save_csv(ls):
    import numpy as np
    import pandas as pd

    # 使用 numpy 创建一个示例数组
    data = np.array(ls)

    # 将 numpy 数组转换为 pandas DataFrame
    #df = pd.DataFrame(data, columns=['A', 'B', 'C'])
    df = pd.DataFrame(data, columns=['student number', 'name', 'sex','grade'])


    # 保存为CSV文件
    df.to_csv('exapandas_save_csvmple.csv', index=False)
    print("CSV file 'pandas_save_csv.csv' created and saved successfully.")

def pandas_save_dict_list_to_csv():
    import pandas as pd
    dict1 = {'学号': [235,432,204], '姓名': ['Alice', 'Bob', 'Tom'], '排名':[3, 23, 86]}
    df = pd.DataFrame(dict1, index=range(0,3))
    df.to_csv('pandas_save_dict_list_to_csv.csv',index = False, encoding='gbk' )


def save_ls_hex_csv(ls):
    with open('sort_lst_hex_csv.csv', 'w', newline ='') as file:
        writer = csv.writer(file)
        for line in ls:
            newline = [hex(int(item)) if str(item).isdigit() else item for item in line]
            writer.writerow(newline)
    print("CSV file 'sort_lst_hex_csv.csv' created and written successfully.")

if __name__ == '__main__':
    file = 'grade0.csv'
    num = int(input("Please input the sort column (1 based) : "))
    grade_list = csv_to_lst(file)
    ls_in_sort = sort_lst(grade_list, num)
    output(ls_in_sort)
    save_ls_csv(ls_in_sort)
    pandas_save_csv(ls_in_sort)
    save_ls_hex_csv(ls_in_sort)
    pandas_save_dict_list_to_csv()

    # 假设我们有一个列表和要转换为十六进制的项的索引
    my_list = [1234, 'abcd', 'xyz']
    # 转换字符串表示的整数为十六进制
    hex_list = [hex(int(item)) if str(item).isdigit() else item for item in my_list]
    print(hex_list)

    grade_list_hex = csv_to_lst('sort_lst_hex_csv.csv')
    ls_in_sort_hex = sort_lst(grade_list_hex, 1)
    output(ls_in_sort_hex)

CSV 文件有多种编码格式,如 UTF - 8、UTF - 16、ANSI 等。如果 CSV 文件是UTF - 8 编码 ,而 Excel 默认使用的是 ANSI 编码 打开,就可能出现乱码。例如,许多从网络应用程序或非 Windows 系统生成的 CSV 文件可能采用UTF - 8 编码

更改 Excel 编码设置:

在 Excel 中,可以通过 "数据 " 选项卡中的 "自文本 / CSV" 功能来导入文件 ,并在导入向导中选择正确的文件原始编码。在导入向导步骤中,会有一个 "文件原始格式" 选项,在这里可以选择 UTF - 8 等合适的编码格式来正确读取文件内容。

使用文本编辑器转换编码:

先使用专业的文本编辑器,如 Notepad++。打开 CSV 文件后,在 "编码" 菜单中查看文件的当前编码。如果是 UTF - 8 等非 Excel 默认支持的编码导致乱码,可以将其转换为 ANSI 编码(不过这种方法可能会丢失一些非 ASCII 字符信息,需要谨慎使用)。

相关推荐
枫叶20005 分钟前
OceanBase数据库-学习笔记1-概论
数据库·笔记·学习·oceanbase
仲夏plus14 分钟前
MySQL:慢SQL索引优化-使用explain/analyze进行耗时分析的方法
数据库
一点.点15 分钟前
李沐动手深度学习(pycharm中运行笔记)——04.数据预处理
pytorch·笔记·python·深度学习·pycharm·动手深度学习
一点.点18 分钟前
李沐动手深度学习(pycharm中运行笔记)——07.自动求导
pytorch·笔记·python·深度学习·pycharm·动手深度学习
tcoding25 分钟前
《MySQL 技术内幕-innoDB 存储引擎》笔记
数据库·笔记·mysql
Edward.W1 小时前
如何有效防止 SQL 注入攻击?
数据库·sql
大霸王龙1 小时前
Python对比两张CAD图并标记差异的解决方案
python·opencv·计算机视觉
好想有猫猫1 小时前
【Redis】服务端高并发分布式结构演进之路
数据库·c++·redis·分布式·缓存
桥Dopey2 小时前
关系型数据库PostgreSQL for Mac 保姆级使用教程
数据库·postgresql
萧鼎2 小时前
PDFMathTranslate:让数学公式在PDF翻译中不再痛苦
python·pdf