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)