本节给大家讲如何批量的合并TXT文件,先讲讲TXT文件的概念,TXT文件是微软在操作系统上附带的一种文本格式,是最常见的一种文件格式 ,主要存文本信息,TXT文件格式具有体积小、存储简单方便;格式比较简单,不会中毒,且是电脑和很多移动设备的通用格式的特点,所以在日常中使用TXT文件格式的数据比较多。
在本节的案例中,一共存在四个文件夹内容,包含四种不同类型的电影,其中,(D)电影类型:动作电影、(Q)电影类型:奇幻电影、(W) 电影类型:战争电影、(X)电影类型:喜剧电影。
数据表格的字段包括电影名称、上映时间、发行公司、电影导演、电影主演、累计票房(万),数据表格如下所示。
数据获取
公众号后台回复
文本文件
获取本文的数据文件
本节的案例需要使用os、pandas、datetime三个库,要将多个TXT文件汇总,我们的分析思路如下。
先将文件夹的每一个TXT文件目录遍历出来。
importpath=r'C:\Users\尚天强\Desktop\中国电影'pathlist=os.listdir(path)
print(pathlist)
['(D)电影类型.txt', '(Q)电影类型.txt', '(W)电影类型.txt', '(X)电影类型.txt']
打印今天的日期给合并的文件命名。
import datetimetoday=str(datetime.date.today())day=today.replace("-","")
print(day)
20210912
新建一个空的数据框,列名命名为'电影名称','上映时间','发行公司','电影导演','电影主演','累计票房(万)'。
import pandas asmerge_data=pd.DataFrame(columns=['电影名称','上映时间','发行公司','电影导演','电影主演','累计票房(万)'])
print(merge_data)
循环遍历每一个TXT文件夹的表头和数据行。
for file_name in pathlist: rawdata=open(r'C:\Users\尚天强\Desktop\中国电影'+'\\'+file_name,'r',encoding='utf-8') line=rawdata.readline() lines=rawdata.readlines() print(line) print(lines)
将遍历的数据统一导入到一个数据框中,数据框的列名叫"中国电影数据"。
data_lines=pd.DataFrame(lines)data_lines.columns=["中国电影数据"]
print(data_lines)
将数据进行分列。
res=data_lines["中国电影数据"].str.split(',',expand=True)
res.head()
分列的数据结果重命名。
res=res.iloc[:,[0,1,2,3,4,5]]res.columns=['电影名称','上映时间','发行公司','电影导演','电影主演','累计票房(万)']
res.head()
根据数据文件表头的字母对电影类型进行打标,比如这里的(X)它对应的电影类型是"喜剧电影"。
type=file_name[0:3]print(type)Dict = {"(D)":"动作电影","(Q)":"奇幻电影","(W)":"战争电影","(X)":"喜剧电影"}res['电影类型'] =typeres['电影类型']=Dict[type]
print(res['电影类型'])
将数据合并的结果全部填充到之前建的merge_data这个空的数据框中,同时添加一列处理日期列,并做去重处理。
result=merge_data.append(res,sort=False) #sort=False合并数据时,避免顺序出错result["处理日期"]=daymerge_data=result.drop_duplicates()
merge_data.head()
至此四个TXT文件的合并结束,导出的结果如下所示。
merge_data.to_excel(r'C:\Users\尚天强\Desktop'+"\\"+"数据合并.xlsx",index=False)
此处的文本文件的合并,代码封装结果如下,使用时可以直接套用。
import osimport pandas as pdimport datetime
path=r'C:\Users\尚天强\Desktop\中国电影'pathlist=os.listdir(path)
today=str(datetime.date.today())day=today.replace("-","")
merge_data=pd.DataFrame(columns=['电影名称','上映时间','发行公司','电影导演','电影主演','累计票房(万)'])
for file_name in pathlist: rawdata=open(path+'\\'+file_name,'r',encoding='UTF-8') line=rawdata.readline() lines=rawdata.readlines() data_lines=pd.DataFrame(lines) data_lines.columns=["中国电影数据"]
#数据分列 res=data_lines["中国电影数据"].str.split(',',expand=True) res=res.iloc[:,[0,1,2,3,4,5]] res.columns=['电影名称','上映时间','发行公司','电影导演','电影主演','累计票房(万)']
#电影类型打标 type=file_name[0:3] res['电影类型'] =type Dict = {"(D)":"动作电影","(Q)":"奇幻电影","(W)":"战争电影","(X)":"喜剧电影"} res['电影类型']=Dict[type] result=merge_data.append(res,sort=False) #sort=False合并数据时,避免顺序出错
#数据日期标注,数据去重 result["数据日期"]=day merge_data=result.drop_duplicates()merge_data.to_excel(path+"\\"+"数据合并.xlsx",index=False)#数据导出