批量txt数据转换为excel

批量txt数据转换为excel

日常工作中经常会遇到大量的数据处理,尤其是大量的txt文件需要转换为excel,只能一个个粘贴复制,有了如下代码,分分钟即可完成繁琐的数据处理工作。

环境准备

需要python和python里的pandas库和openpyxl库,如果没有可以到管网下载python,并利用pip install + 库名进行pandas库和openpyxl库的安装。

代码

首先,我们需要读取文件中txt文件的名称。导入os库进行名称读取。

import os
import pandas
def file_name(file_dir):
    for root,dirs,files in os.walk(file_dir):
            dirs_name = files
    return dirs_name
fils = list(file_name(r'E:\python idea\EVP'))

利用os库,我们可以拿出file_dir目录下的root(路径)、dirs(文件夹名称)、files(文件名)。本次我们只需要文件名,所以return文件名。利用file_name函数拿出文件名后,用list函数把它变成列表,便于循环。
然后,我们需要利用pandas拿到txt中的数据。先建立一个空的DataFrame用于储存数据。

data_new = pd.DataFrame()
for i in fils:
    data = pd.read_table(r'E:\python idea\EVP\\' + i,header=None,encoding='gbk',delimiter='\s+',index_col=0)
    data_new = pd.concat((data_new,data))

然后循环fils,拿出文件名,利用pandas中的read_table函数拿出txt数据。read_table函数第一个参数为文件所在位置,header参数为有无列标签,encoding为编码方式,delimiter='\s+'这个参数可以去掉所有的空格,试用于很多空格的txt,index_col=0这个参数可以把第一列变为行索引。最后利用concat函数拼接即可完成数据读取。
最后利用pandas中的to_excel进行数据的输出,完整代码如下:

import pandas as pd
import os

def file_name(file_dir):
    for root,dirs,files in os.walk(file_dir):
            dirs_name = files
    return dirs_name
fils = list(file_name(r'E:\python idea\EVP'))
# fils1 = fils[:400]
# fils2 = fils[400:]
# print(fils1)

data_new = pd.DataFrame()
for i in fils:
    data = pd.read_table(r'E:\python idea\EVP\\' + i,header=None,encoding='gbk',delimiter='\s+',index_col=0)
    data_new = pd.concat((data_new,data))
# print(data_new[0:10000000])
data_new[0:10000000].to_excel(r'E:\python idea\EVP\evp.xlsx',sheet_name="sheet1")
data_new[10000000:].to_excel(r'E:\python idea\EVP\evp.xlsx',sheet_name="sheet2")

由于数据量太大还进行了分块转换。

新增了一个封装更好的代码,txt文件没有列名,自己指定就好:

import pandas as pd
import os
def Search_File(dirname,suffix):
    '''
    This function can search all files with the specified suffix in this dir.
    :param dirname: string, the path need to be searched
    :param suffix: string, the specified suffix need to be seached
    :return:
    filter_list: list, the path list need to be searched.
    '''
    filter = [suffix]  # 设置过滤后的文件类型 当然可以设置多个类型
    filter_list = []
    for maindir, subdir, file_name_list in os.walk(dirname):
        #print(maindir) #当前主目录
        for filename in file_name_list:
            apath = os.path.join(maindir, filename)#合并成一个完整路径
            portion = os.path.splitext(apath)
            ext = portion[1]  # 获取文件后缀 [0]获取的是除了文件名以外的内容

            if ext in filter:
                newname = portion[0] + suffix

                filter_list.append((newname,portion[0].split("\\")[-1]))
    # print(filter_list)
    return filter_list



def acc_data_to_csv(file_name_list):
	'''
	file_name_list:the result of Search_File function.
	return:data_sum , DateFrame.
	'''
    def txt_to_csv(file_name_list,ouput_path,sep='\s+',name=[]):
    '''
    
    :param file_name_list: the result of Search_File function
    :param ouput_path: str,csv
    :param sep: 
    :param name: the label of row
    :return: 
    '''

    if len(name) == 0:
        data = [pd.read_table(dir,sep=sep) for dir, path in file_name_list]
    else:
        data = [pd.read_table(dir,names=name,sep=sep) for dir,path in file_name_list]
    result = pd.concat(data,axis=0)
    print(result)
    result.to_csv(ouput_path)
# csv储存量较大
file_list = Search_File(r"E:\python idea\EVP",".txt")
data = acc_data_to_csv(file_list)
data1 = data.iloc[:int(int(data.shape[0])/3),:]
data2 = data.iloc[int(int(data.shape[0])/3):int(int(data.shape[0])/3)*2,:]
data3 = data.iloc[int(int(data.shape[0])/3)*2:,:]
data1.to_excel(r"evp_day1.xlsx",sheet_name="Sheet1")
data2.to_excel(r"evp_day2.xlsx",sheet_name="Sheet1")
data3.to_excel(r"evp_day3.xlsx",sheet_name="Sheet1")
  • 8
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值