问题提出:有一个文件,包括单位多个部门的数据,需要将起分为各部门的数据文件。其中区分的依据为第一列的前三个字符为部门编码,编码格式为UTF-8。
文件内容如下:(csvall.csv)
D01010,张三1
D01020,张三2
D01030,张三3
D01040,张三4
D01050,张三5
D02010,张三6
D02020,张三7
D02030,张三8
D02040,张三9
D02050,张三10
D02060,张三11
D03010,张三12
D03020,张三13
D03030,张三14
D03040,张三15
D04010,张三16
D04020,张三17
D04030,张三18
D04040,张三19
D04050,张三20
D04060,张三21
D05010,张三22
D05020,张三23
D05030,张三24
D05040,张三25
D05050,张三26
D06010,张三27
D06020,张三28
D06030,张三29
'''
CSV分离软件:根据第一列前三字符(部门编号)拆分CSV文件
从第一列的前三个字符(部门编码)分别区分,存储为不同的文件。
运行前先删除生成的文件,避免追加
文件采用UTF-8编码,源文件第一行多一个字符(ASCII-65279)
故:读取源文件时,第一行编码为第2-4个字符[1:4],其他行为1-3[0-3]
生成的文件第一个字符需添加该字符,否则Excel打开中文会出现乱字符
用写字板可以正常打开,但若另存后,会自动添加该字符。
提示:用with可以自动管理文件的打开和关闭。
'''
with open('csvall.csv', 'r', encoding='UTF-8') as f:
# 文件第一行第一个字符为文件的开始符,故要特殊处理
# 目的是在Excel正常打开,在写字板下不受影响
for line in f.readlines(1): # 读第一行
# 文件第一行多一个开始字符,所以要多读一个字符
startchr = line[0] # 读取文件的开始符(65279)
# 读第一列部门编号(需3个字符),因带文件开始付,故多读一个
dep = line[1:4]
with open(dep + '.csv', 'a', encoding='UTF-8') as wf:
wf.write(line)
depold = dep
# (第一行) 部门编号保存到变量,方便后面对照是否文件已建立(对照单位编号)
# 若已建立,就不需要保存首字符(65278)
for line in f.readlines(): # 后面行无开始字符
dep = line[0:3] # 取得部门编号
with open(dep + '.csv', 'a', encoding='UTF-8') as wf:
# 若不是新的部门,不添加开始符,即部门名称与上一行一样
if dep == depold:
wf.write(line)
else:
# 新部门,文件第一行添加开始符
wf.write(startchr + line)
depold = dep # 保存原部门名,判断是否第一行
f.close() # 关闭文件
在这里插入代码片