在实验中采集完成数据后要对数据进行处理,需要把 mega.csv
中的两种数据提取出来分别存放到 SourceAdcData.csv
和 FreqDomainData.csv
中。通过面向互联网编程,找到了解决方法是利用 os.walk 来实现。
对单个文件进行数据提取
读取
pd.read_csv(filepath, header=None, index_col=False)
可选参数说明:
filepath:路径URL,可以使http、ftp、s3和file
sep:指定分隔符,默认是’,’
header:指定第几行作为列索引,如果没有指定,默认header=0,header=None时指明原始文件数据没有列索引,这样read_csv会自动加上列索引
index_col:将真实的某列当作index,默认为None,即不指定行索引,这样系统会自动加上行索引。
usecols:返回给定列表的子集,即返回指定列名的数据
获取DataFrame的某行数据
loc通过行和列的名字获取值,也支持切片操作。
获取单行数据:df.loc[raw]
,其中raw可以是行名,也可以是行索引
获取多行数据:df.loc[[raw1,raw2]]
同时选定行和列:df.loc[raw,col]
同时选定多行和单列:df.loc[[raw1:rawn],[col]]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import pandas as pdsource_adc_data = pd.DataFrame() freq_domain_data = pd.DataFrame() mega = pd.read_csv('mega.csv' , header=None , index_col=False ) turn = 1 for i in range(0 , len(mega)): if (turn == 1 ): source_adc_data = source_adc_data.append(mega.loc[i]) turn = 0 else : freq_domain_data = freq_domain_data.append(mega.loc[i]) turn = 1 source_adc_data.to_csv('SourceAdcData.csv' , header=None , index=None ) freq_domain_data.to_csv('FreqDomainData.csv' , header=None , index=None )
遍历目录下所有文件和目录
使用 os.walk
能够做到,for root,dirs,files in os.walk("D:\test"):
root 所指的是当前正在遍历的这个文件夹的本身的地址
dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)
获取test目录下的所有文件
1 2 3 4 5 6 for root,dirs,files in os.walk("D:\test" ): for file in files: print(root) print(os.path.join(root,file))
获取test目录下的所有目录
1 2 3 4 5 6 for root,dirs,files in os.walk("D:\test" ): for dir in dirs: print(dir) print(os.path.join(root,dir))
最终代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 import pandas as pdimport osdef splite_data (file_path) : print(file_path + '\mega.csv' ) source_adc_data = pd.DataFrame() freq_domain_data = pd.DataFrame() mega = pd.read_csv(file_path + '/mega.csv' , header=None , index_col=False ) turn = 1 for i in range(0 , len(mega)): if (turn == 1 ): source_adc_data = source_adc_data.append(mega.loc[i]) turn = 0 else : freq_domain_data = freq_domain_data.append(mega.loc[i]) turn = 1 source_adc_data.to_csv(file_path + '/SourceAdcData.csv' , header=None , index=None ) freq_domain_data.to_csv(file_path + '/FreqDomainData.csv' , header=None , index=None ) data_path = 'C:\\Users\\songzb\\Desktop\\实验\\实验数据' for root,dirs,files in os.walk(data_path): for file in files: if (file == 'mega.csv' ) and ('SourceAdcData.csv' not in files): splite_data(root)
然后通过验证生成文件的列数来判断是否正确
1 2 3 4 5 6 7 8 cols=766 for root,dirs,files in os.walk(data_path): for file in files: if (file == 'SourceAdcData.csv' ): df = pd.read_csv(root + '\SourceAdcData.csv' , header=None , index_col=False ) if (df.shape[1 ] != cols): print(df.shape[1 ]) print(root+ '\\' + file)