将文件夹中的多个txt文件合并为一个文件,并将文件名作为标签,写入csv中

这段代码读取'E:datasurname ames'目录下所有.txt文件的内容,将文件按类别(基于文件名)组织成字典,并对姓名进行Unicode到ASCII的转换。然后,将结果写入CSV文件,包含两列:'surname'和'nationality',记录了姓氏和国籍信息。
摘要由CSDN通过智能技术生成

文件夹下的文件:
在这里插入图片描述
每个文件中的内容:
在这里插入图片描述
代码:

from __future__ import unicode_literals, print_function, division
from io import open
import glob
import os
import unicodedata
import string
def findFiles(path): return glob.glob(path)
categorty_lines = {}
all_categories = []
for filename in findFiles('E:\\data\\surname\\names\\*.txt'):
    category = os.path.splitext(os.path.basename(filename))[0]
    all_categories.append(category)
    lines = readLines(filename)
    categorty_lines[category] = lines
print(categorty_lines)
all_leters = string.ascii_letters + " .,;"
n_letters = len(all_leters)
def unicodeToAscii(s):
    return ''.join(
        c for c in unicodedata.normalize("NFD",s)
        if unicodedata.category(c) != 'Mn' and c in all_leters
    )
print(unicodeToAscii('Ślusàrski'))
categorty_lines = {}
all_categories = []
def readLines(filename):
    lines = open(filename,encoding='utf-8').read().strip().split('\n')
    return [unicodeToAscii(line) for line in lines]
for filename in findFiles('E:\\data\\surname\\names\\*.txt'):
    category = os.path.splitext(os.path.basename(filename))[0]
    all_categories.append(category)
    lines = readLines(filename)
    categorty_lines[category] = lines
    
n_categories = len(all_categories)

结果:
在这里插入图片描述
将categorty_lines字典类型数据存入csv文件中:

import csv
fpath = r'E:\\data\\surname\\names\\merge_surname.csv'
f = open(fpath, 'w')
res_list = []
res_dic = {}
for key,value in categorty_lines.items():
    for v in value:
        res_dic["surname"]=v
        res_dic['nationality']=key
        res_list.append(res_dic)
        res_dic={}
fieldnames = ['surname','nationality']
csvw = csv.DictWriter(f,fieldnames=fieldnames,lineterminator='\n')
csvw.writeheader()
csvw.writerows(res_list)
f.close()

解析:
首先将数据解析为列名:值的形式;即
在这里插入图片描述
最终形式为:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值