简明python教程txt-Python新手的数据批量处理教程(TXT文件)

最近想用python批量处理数据,把自己网上找答案的过程整理了一下,希望对大家有用。

问题:

一个文件夹中有38个txt文件,这38个txt的命名各不相同,要把这38个txt文件中的数据整合到一个txt中。

思路:

获取所有txt文件的名称、路径,然后用for循环遍历每个txt文件,进行处理。最后将处理后的数据合并。

先看下总体代码,后面有具体解释。

import pandas as pd

import numpy as np

import os

os.getcwd()

os.chdir('/Users/Heihei/Desktop/EX2data/data')

path = '/Users/Heihei/Desktop/EX2data/data'

os.listdir(path)

datalist = []

for i in os.listdir(path):

if os.path.splitext(i)[1] == '.txt':

datalist.append(i)

df = pd.DataFrame()

for txt in datalist:

data_path = os.path.join(path,txt)

df_txt = pd.read_table(data_path,index_col = False)

df_txt['sub_n'] = txt[:2]

df_txt_sx = df_txt[df_txt['split'].isin([1,2])]

df = pd.concat([df,df_txt_sx],axis=0, ignore_index=True)

df.head(5)

df.tail(5)

df.shape

df.isnull().sum()

df.duplicated().sum()

df.to_csv('/Users/Heihei/Desktop/EX2data/data/Total_data',index=False)

代码解释

1. 获取路径

#载入需要的模块

import pandas as pd

import numpy as np

import os

os.getcwd() #获取当前工作路径,查看是否是自己的目标路径

os.chdir('/Users/Heihei/Desktop/EX2data/data') #如果不是,改到目标路径

path = '/Users/Heihei/Desktop/EX2data/data'

os.listdir(path) #查看目标路径下有哪些数据

结果显示(中间有很多了txt我把它省略了):

['.DS_Store',

'01lwj.txt',

......

'38lym.txt']

由上面可以看到,出现了一个“ .DS_Store”文件。如果我们直接用os.listdir(path)进行循环,会报错。

“ .DS_Store” 文件是Mac OS系统的Finder 用来存储这个文件夹的显示属性的:比如文件图标的摆放位置。具体可以看这篇文章:http://mini.eastday.com/mobile/180317092251931.html#。 因此。我们需要重新建立一个不包含该文件的list,新的list只含有txt数据。

datalist = []

for i in os.listdir(path):

if os.path.splitext(i)[1] == '.txt': #选取后缀为txt的文件加入datalist

datalist.append(i)

datalist #查看datalist

os.path.splitext

把文件分为文件名和扩展名。比如os.path.splitext(a.txt)的结果为a 以及 .txt 。因此,os.path.splitext(i)[1]的意思就是取出文件的后缀名。

除了该函数外,还有一个os.path.split 的函数,该函数用来把路径分为文件名与文件目录,比如“/user/heihei/data.txt” ,经过作用后可以被分为“/user/heihei”和 “data.txt”

另外,注意python中的顺序。list[x:y] 是从第“x+1”个数(因为python的第一个数是0)开始,直到y结束(不包含y)。如list = [0,1,2] , list[1:2]的结果是[1]。

2. 循环合并数据

df = pd.DataFrame()

for txt in datalist:

data_path = os.path.join(path,txt) #列出path路径下目标文件的绝对路径,将其赋值给data_path

df_txt = pd.read_table(data_path,index_col = False) #读取目标txt文件,不把原Data第一列作为索引

df_txt['sub_n'] = txt[:2] #取出前面的数值,并赋值给sub_n这一列(合并后我需要知道哪些数据来自哪个文件)

df_txt_sx = df_txt[df_txt['split'].isin([1,2])] #用isin方法进行数据筛选(我的数据中split一列有3个值,我只需要改列值为1,2的行,其他行不需要)

df = pd.concat([df,df_txt_sx],axis=0, ignore_index=True) #(将筛选后的数据加到df框中。axis=0表示上下合并,axis=1表示左右合并,ignore_index=True表示忽略原来索引。除了concat函数外,也可以用df.append实现,但是还要改索引,比concat方法会麻烦点)

3. 检查合并完的数据

df.head(5) #检查最开始5行数据

df.tail(5) #检查最后5行数据

df.shape #查看数据框行列是否和预期一样

df.isnull().sum() #查看是否有缺失值

df.duplicated().sum() 查看是否有重复值

4. 保存数据

df.to_csv('/Users/Heihei/Desktop/EX2data/data/Total_data',index=False)

# index=False 表示不保存索引数据

#之后如果要读取的话,直接df.read_csv('Total_data', index_col=False)就能得到 df框。

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值