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)