CSV文件内容

输出格式1
输出结果: L: [{'name': '张三', 'age': '27', 'sex': '男'}]
附上代码:
with open('CSV.csv','r') as f:
keys = f.readline().strip().split(',')#代表了第一行数据(表头)
L = []
# d=f.readlines()
for x in f.readlines():
dict_ = {}
line = x.strip().split(',')
for i in range(len(keys)):
dict_[keys[i]] = line[i]
L.append(dict_)
print(L)
代码分析:
1.keys是通过读取csv文件第一行获取表头数据(readline()一次只读取一行数据,strip()作用于字符串,在此处可以去除空格,split()可以按规定的分隔符进行分隔字符串,使其变成列表)
2.d是通过readlines()将剩余的CSV文件一次性全部读入,每一行数据作为列表的元素
3.通过对d的遍历,获取每一行的数据,然后通过line变量(列表类型),获取每一行的每一个数据
4.通过想要达到的效果,我们知道,一行数据是单独占领一个dict_的,每行数据在加入dict_后(循环结束后),应该要将其append到L列表中
注意点:
1.如果你在程序中插入读的相关操作,那么你会影响文件指针的指向,影响下面程序读取文件数据
输出格式2
输出结果: dict_={'name': ['张三', '王五'], 'age': ['27', '23'], 'sex': ['男', '男']}
附上代码:
with open('CSV.csv','r') as f:
keys = f.readline().strip().split(',')
L = []
dict_ = {}
for x in f.readlines(): #循环1
line = x.strip().split(',')
for i in range(len(keys)):#循环2
L.append (line[i])#截取到各行的数据
for i in range(len(keys)):#循环3
dict_[keys[i]] = L[i::len(keys)]
print(dict_)
代码分析:
1.整个程序的思路很清晰,将每行的数据(3个子数据)全部都放在L中,然后使用切片做成我们想要的效果(真的很巧妙!)
2. L在整个程序运行完后的结果:[‘张三’, ‘27’, ‘男’, ‘李四’, ‘24’, ‘女’, ‘王五’, ‘23’, ‘男’]
3.循环1读取除表头外的每行数据
4.循环2中的L每次都将每行的数据append进来
5.循环3就是利用切片将L中的姓名,年龄,性别分别切出来,对应地放在dict_中相应的键中(keys[i])中
# solution 2: 第二种打印形式
def operate_file(filepath):
with open(filepath, 'r', encoding='UTF-8') as f:
keys = f.readline().strip().split(',') # keys 是其中的表中的字段,用strip来去除每行末尾的换行符
dic, n = {}, 0 # dic用来存放最终数据,n控制读取表字段的累加器
"""
1. 利用双重循环达到1×3(1个name键下有3个名字)的匹配结果
2. 散列表是无序的,不能保证按顺序读入表中字段(好像不影响)
3. 做了很多无用功,每次values循环只能填写字典中的一个键的所有取值,然后重新定位到第二行
4. 刚开始的错误, 遍历keys时,因为它是最外层循环,so 必须等里头的循环执行完毕才能遍历下一个key,导致dic[key] 在values 和n都改变的情况下,key还是不变
5. 因为values 遍历一遍后f就指向文件末尾,需要重新定位到第二行,不然遍历f始终为空
"""
for key in keys:
dic[key] = []
for values in f: # 每次的values 都是一行数据,也就是说a 是每一行列表数据的第n个元素
a = values.strip().split(',')[n]
dic[key].append(a) # 其中的key 正好对应 元素a
n += 1 # 因为要读取每一行的不同下标的元素,so此处n需要加1
f.seek(13, 0) # 文件定位到第二行的第一个元素,以提供给最近一层的for循环遍历f
# 第一个参数:偏移量,第二个参数:指针位置
return dic
本文详细介绍了解析CSV文件的两种常见方法:将数据转换为字典列表和将数据组织成键值对字典。通过具体代码实例,展示了如何读取CSV文件的表头,逐行处理数据,并最终形成所需的数据结构。

2350

被折叠的 条评论
为什么被折叠?



