返回 导航

Python

hangge.com

Python - 文件读写操作详解2(读写csv文件)

作者:hangge | 2022-04-07 09:44
    CSV (Comma Separated Values),即逗号分隔值(也称字符分隔值,因为分隔符可以不是逗号),是一种常用的文本格式,用以存储表格数据,包括数字或者字符。而 Python 本身就内置了 csv 模块,可以很方便地对 csv 文件进行操作,下面通过样例进行演示。

三、读写 csv 文件

1,读文件

(1)假设我们有如下一个 csv 文件:

(2)下面样例我们将所有内容读取出来并存放到一个列表中,csv.reader() 方法返回的是一个可迭代的对象,需要使用 for 循环遍历:
import csv
with open("py.csv", "r") as f:
    reader = csv.reader(f)
    rows = []
    for row in reader:
        rows.append(row)
    print(rows)

(3)如果数据中包含表头,读取时希望把表头和数据分开的话,可以进行如下操作:
import csv
with open("py.csv", "r") as f:
    reader = csv.reader(f)
    # 读取表头
    header = next(reader)
    print(header)
    # 读取内容
    rows = []
    for row in cf:
        rows.append(row)
    print(rows)

(4)csv.DictReader() 方法则会将内容读进列表,列表条目为字典,其中第一行的内容(表头内容)作为 key 值:
import csv
with open("py.csv", "r") as f:
    reader = csv.DictReader(f)
    for dic in reader:
        print(dic)
        print(dic["ID"])
        print(dic["NAME"])
        print(dic["AGE"])

2,写文件

(1)要写文件首先通过 csv.writer 方法创建一个 writer 对象,然后调用该对象的 writerow(写入一行)、writerrow(写入多行)方法即可:
提示newline='' 表示以空格作为换行符,避免生成的表格中出现空行。
import csv

header = ['ID', 'NAME', 'AGE']
rows = [
    ['1', '韩美', '22'], 
    ['2', '史蒂夫', '33'],
    ['3', '小李', '44']
]

with open("py.csv", "w", newline = "") as f:
    writer = csv.writer(f)
    writer.writerow(header)
    writer.writerows(rows)

(2)如果要写入字典序列类型数据,则需要通过 csv.DictWriter 创建一个 dictWriter 对象。然后写入表头的时候,只需要调用 writerheader 方法,写入一行字典系列数据调用 writerrow 方法,并传入相应字典参数,写入多行调用 writerows
import csv

header = ['ID', 'NAME', 'AGE']
rows = [
    {'ID':'1', 'NAME':'韩美', 'AGE':'22'}, 
    {'ID':'2', 'NAME':'史蒂夫', 'AGE':'33'},
    {'ID':'3', 'NAME':'小李', 'AGE':'44'}
]

with open("py.csv", "w", newline = "") as f:
    writer = csv.DictWriter(f, header)
    writer.writeheader()
    writer.writerow(rows[0])
    writer.writerows(rows)

附:将 csv 文件里的数据打乱

(1)首先我们定义一个方法 shuffle_csvdata_file,该方法作用是读取指定文件里的数据,然后将行顺序随机打乱后写入到一个新的文件中:
提示:第三个参数表示是否有表头,默认为 true
import random
def shuffle_csvdata_file(input_file,output_file,withheader=True):
    #读csv文件,随机打乱数据顺序,并输出为新的csv文件
    rowlist = []
    with open(input_file, 'r') as f:
        reader = csv.reader(f, delimiter=',', quotechar='"')
        if withheader:
            header = next(reader)
        for row in reader:
            rowlist.append(row)
    #打乱顺序
    random.shuffle(rowlist)
    #将数据写入到新文件
    with open(output_file,'w') as fw:
        writer = csv.writer(fw, delimiter=',', quotechar='"', escapechar='\\', quoting=csv.QUOTE_ALL)
        if withheader:
            writer.writerow(header)
        for row in rowlist:
            writer.writerow(row)
    print("完成!")

(2)使用时调用该方法即可:
shuffle_csvdata_file('py.csv', 'py2.csv')
评论

全部评论(0)

回到顶部