motivation:爲了研究某設備的壽命,需對所有採集到的信號進行處理,以預測剩餘使用壽命
problem:數據量比較大,大概有半年的數據,按一定的採樣頻率保存在txt文件中。現需要將所有的數據統計並處理
method:利用Python讀取保存目錄下所有文件夾的txt文件,並提取所有txt文件保存爲一個包括所有數據的文件
問題思考:差不多十多年沒有寫過程序,處於從頭開始學習編程,遇到問題的時候,能夠大概分解問題,但不能迅速得到具體實現方法,腦袋一片混沌
問題得以解決大概花了兩天時間
第一天:查詢資料,實現批量讀取目錄下的所有txt文件,參考出處忘記保存
實現過程中主要用到python的目錄及enumerate功能
enumerate函數功能在於對可迭代的數據進行標號並將其裏面的數據和標號一併打印出來。
enumerate(iterable, start=0)
第一個參數爲可迭代的數據,比如python中的list,這裏爲目錄下的文件夾。第二個參數爲該函數打印標號的初始值,默認從0開始打印,該函數返回一個enumerate類型的數據。
import glob
import os
import tensorflow as tf
import numpy as np
import pandas as pd
path=r'C:\Users\Python'
f =r'C:\Users\Python\new_file.txt'
# read all txt files and save all columns to new_file
def read_writeFile(path,f):
# cate=[path+'/'+x for x in os.listdir(path)]
cate=[x for x in os.listdir(path)]
f2 = open(f, 'a+')
for idx,folder in enumerate(cate):
for im in glob.glob(folder+'/*.txt'):
f1 = open(im, 'r')
for eachLine in f1:
f2.write(eachLine)
f2.write(' '+str(idx+1)+'\n')
f1.close()
read_writeFile(path,f)
第二天:查詢資料,實現在第一天得到所有txt合併文件前根據採樣頻率添加序號,便於後續處理
這裏採用count計算行號,並將得到的每行行號添加到txt文件相應行的第一列
f2.write(str(count)+'\t'+eachLine)
# read all txt files and save all columns to new_file
def read_writeFile(path,f):
# cate=[path+'/'+x for x in os.listdir(path)]
cate=[x for x in os.listdir(path)]
f2 = open(f, 'a+')
count=1
for idx,folder in enumerate(cate):
for im in glob.glob(folder+'/*.txt'):
f1 = open(im, 'r')
for eachLine in f1:
f2.write(str(count)+'\t'+eachLine)#爲每行添加序號
count+=2
# f2.write(' '+str(idx+1)+'\n')
f1.close()
read_writeFile(path,f)