由於刚上手一个python做项目,会遇到各种的坑,所以边学习边实践,通过写一篇博文来记录其中的知识点,方便自己以后再用到时便于查找。
第一步:创建文件夹,用来存中间计算过程中的数据
def mkdir(path):
folder = os.path.exists(path)
if not folder: #判断是否存在文件夹如果不存在则创建为文件夹
os.makedirs(path) #makedirs 创建文件时如果路径不存在会创建这个路径
print ("創建新文件夾:%s"%path)
else:
for info in os.listdir(path):
domain=os.path.abspath(path) #获取文件夹的路径
info=os.path.join(domain,info)
os.remove(info)
# print( "\該文件夾已經存在,已經清空文件夾下的所有內容")
file1 = "D:\\SPI\\Real"
mkdir(file1)
第二步:匹配信息,读取CSV文件夹的的数据,并存到txt文档中
老板说了,你这个程序,一些必要的信息能不能只输入一次就可以了,以后就不要认为输入了。后来我想,创建一个文件夹,里面建一个excel文档,把要输入的信息固定文件命名格式和里面内容格式定死,只要用户往里面填写东西就行了。当然了,要输入信息的这个文件名称和搜索数据的文件名称要对得上才行,例如,D:\SPI\Model里有A121231.xlsx 、A121232.xlsx 和D:\SPI\SPIDATA\A121231_dsf.csv、A121231_dss2f.csv、A121231_ds222f.csv、A121231_dsf454.csv有相同的A121231,根据这个就把A121231.xlsx和D:\SPI\SPIDAT里面的文件夹数据匹配起来了。
if not os.listdir('D:\\SPI\\SPIDATA'):
time.sleep(2)
else:
for info1 in os.listdir(r'D:\\SPI\\Model'):
a=info1.split('.')[0]
for info2 in os.listdir(r'D:\\SPI\\SPIDATA'):
b=info2.split('_')[0]
if a==b:
c=a
else:
continue
path=pd.read_excel('D:\SPI\\Model\\%s.xlsx'%c)
pad=path.PAD
upA=path.upA
downA=path.downA
upH=path.upH
downH=path.downH
第三部:数据定期读取
在这个程序中,每5秒钟就读取一次文件夹,把满足条件的数据读出来并存到dataframe中,当一个csv文档被读完后,把它移到到另外一个地方去,防止下次读取时重复读取,如果这个文件夹对你没有用来,也可以考虑删掉。
while 1==1:
if not os.listdir('D:\\SPI\\SPIDATA') or len([name for name in os.listdir(r'D:\\SPI\\SPIDATA')])2) or (db.AREA[s]/np.mean(db.AREA)<0.5):
db.AREA[s]=np.mean(db.AREA)
db.HIGHT[s]=np.mean(db.HIGHT)
fileName1='%s.txt'%pad[j] #把每一個pad點的高度和面積存到對應的文件夾中
filePath1=file1+os.path.sep+fileName1
db.to_csv(filePath1,sep=',',index=False,header=None,mode='a+')
infoo.close() #關閉已打開的文件
shutil.move(info,file3) #移動文件到path裡
第四步|:数据排序
在这一步中,遇到数据按时间排序的问题,在在网上找到的办法是db.sort_values(by=‘DateTime’),这种办法打印出来后,看到的数据是按时间排序了,但是原始数据db的顺序并没有被打乱。要修改为db.sort_values(by=‘DateTime’,ascending=True,inplace=True)
这里遇到一个坑,关于时间转换的问题,我用过两种办法,一种是用datetime,另一种是time,发现用datetime 转换会不准,至于为什么,我还没搞明白。
举个例子:
import datetime
import time
Time='2019-04-23 21:15:36'
T=datetime.datetime.strptime(Time,'%Y-%m-%d %H:%M:%S')
d11=datetime.datetime.timestamp(T)
dateArray = datetime.datetime.utcfromtimestamp(d11)
otherStyleTime = dateArray.strftime("%Y-%m-%d %H:%M:%S")
print(otherStyleTime)
otherStyle=time.strptime(Time,'%Y-%m-%d %H:%M:%S')
otherStyle1=time.mktime(otherStyle) #轉換成時間錯
otherStyle2=time.localtime(otherStyle1)
otherStyle3=time.strftime('%Y-%m-%d %H:%M:%S',otherStyle2)
print(otherStyle3)
2019-04-23 13:15:36
2019-04-23 21:15:36
至于项目中的其他程序,怕被老板看到,就不一一贴出来了。
程序要实际应用起来,还有很多路要走,还有很多地方要修改完善,这一路上的苦,跪着也要走完。