部分数据存入数据库

master
yangxudongll 4 years ago
parent 5f42c114ab
commit 262e968fb7

@ -0,0 +1,6 @@
<component name="InspectionProjectProfileManager">
<settings>
<option name="USE_PROJECT_PROFILE" value="false" />
<version value="1.0" />
</settings>
</component>

@ -0,0 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.6" project-jdk-type="Python SDK" />
</project>

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/数据存储.iml" filepath="$PROJECT_DIR$/.idea/数据存储.iml" />
</modules>
</component>
</project>

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/.." vcs="Git" />
</component>
</project>

@ -0,0 +1,102 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="fcea9d71-f4b2-41ab-b680-ecae8402b966" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/xinguan.sql" beforeDir="false" afterPath="$PROJECT_DIR$/xinguan.sql" afterDir="false" />
<change beforePath="$PROJECT_DIR$/../数据采集/百度数据/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/../数据采集/百度数据/.idea/workspace.xml" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$/.." />
</component>
<component name="ProjectId" id="1feziIuC7mkUIgggUnBaTTaY5uL" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showExcludedFiles" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
</component>
<component name="RunManager">
<configuration name="Grapmain" type="PythonConfigurationType" factoryName="Python" temporary="true" nameIsGenerated="true">
<module name="数据存储" />
<option name="INTERPRETER_OPTIONS" value="" />
<option name="PARENT_ENVS" value="true" />
<envs>
<env name="PYTHONUNBUFFERED" value="1" />
</envs>
<option name="SDK_HOME" value="" />
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
<option name="IS_MODULE_SDK" value="true" />
<option name="ADD_CONTENT_ROOTS" value="true" />
<option name="ADD_SOURCE_ROOTS" value="true" />
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/Grapmain.py" />
<option name="PARAMETERS" value="" />
<option name="SHOW_COMMAND_LINE" value="false" />
<option name="EMULATE_TERMINAL" value="false" />
<option name="MODULE_MODE" value="false" />
<option name="REDIRECT_INPUT" value="false" />
<option name="INPUT_FILE" value="" />
<method v="2" />
</configuration>
<recent_temporary>
<list>
<item itemvalue="Python.Grapmain" />
</list>
</recent_temporary>
</component>
<component name="ServiceViewManager">
<option name="viewStates">
<list>
<serviceView>
<treeState>
<expand />
<select />
</treeState>
</serviceView>
</list>
</option>
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="fcea9d71-f4b2-41ab-b680-ecae8402b966" name="Default Changelist" comment="" />
<created>1596593471956</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1596593471956</updated>
</task>
<servers />
</component>
<component name="WindowStateProjectService">
<state width="1814" height="387" key="GridCell.Tab.0.bottom" timestamp="1596607121816">
<screen x="67" y="27" width="1853" height="1053" />
</state>
<state width="1814" height="387" key="GridCell.Tab.0.bottom/67.27.1853.1053@67.27.1853.1053" timestamp="1596607121816" />
<state width="1814" height="387" key="GridCell.Tab.0.center" timestamp="1596607121816">
<screen x="67" y="27" width="1853" height="1053" />
</state>
<state width="1814" height="387" key="GridCell.Tab.0.center/67.27.1853.1053@67.27.1853.1053" timestamp="1596607121816" />
<state width="1814" height="387" key="GridCell.Tab.0.left" timestamp="1596607121816">
<screen x="67" y="27" width="1853" height="1053" />
</state>
<state width="1814" height="387" key="GridCell.Tab.0.left/67.27.1853.1053@67.27.1853.1053" timestamp="1596607121816" />
<state width="1814" height="387" key="GridCell.Tab.0.right" timestamp="1596607121816">
<screen x="67" y="27" width="1853" height="1053" />
</state>
<state width="1814" height="387" key="GridCell.Tab.0.right/67.27.1853.1053@67.27.1853.1053" timestamp="1596607121816" />
<state x="1111" y="25" key="search.everywhere.popup" timestamp="1596606706048">
<screen x="67" y="27" width="1853" height="1053" />
</state>
<state x="1111" y="25" key="search.everywhere.popup/67.27.1853.1053@67.27.1853.1053" timestamp="1596606706045" />
</component>
</project>

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$" />
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
<option name="PROJECT_TEST_RUNNER" value="Twisted Trial" />
</component>
</module>

@ -0,0 +1,199 @@
import pymysql
import pandas as pd
#城市疫情信息
class CityInfo():
def __init__(self):
self.city='' #城市
self.confirmed=0 #累计
self.died=0 #死亡
self.cured=0 #治愈
self.confirmedRelative=0 #新增
self.curConfirm=0 #现有
def __str__(self):
return "%s 累计:%d ,新增:%d ,治愈:%d ,现有:%d ,死亡:%d"%(self.city,self.confirmed,self.confirmedRelative,
self.cured,self.curConfirm,self.died)
#省疫情信息
class Porvince():
def __init__(self):
self.confirmed = 0,
self.died = 0,
self.crued = 0,
self.relativeTime = 0,
self.confirmedRelative = 0,
self.diedRelative = 0,
self.curedRelative = 0,
self.asymptomaticRelative = 0,
self.asymptomatic = 0,
self.curConfirm = 0,
self.curConfirmRelative = 0,
self.icuDisable = 0,
self.area = '',
self.pub_date = '',
self.subList = [],
def __str__(self):
return "%s 现存确诊%d, 累计确诊%d, 死亡%d, 治愈%d,更新时间%s"%(self.area,self.curConfirm,self.confirmed,self.died,self.crued,self.pub_date)
#国内疫情概况
class InsideChina():
def __init__(self):
self.curConfirm = 0,
self.curConfirmRelative = 0,
self.asymptomatic = 0,
self.asymptomaticRelative = 0,
self.unconfirmed = 0,
self.unconfirmedRelative = 0,
self.icu = 0,
self.icuRelative = 0,
self.confirmed = 0,
self.confirmedRelative = 0,
self.overseasInput = 0,
self.overseasInputRelative = 0,
self.cured = 0,
self.curedRelative = 0,
self.died = 0,
self.diedRelative = 0,
self.updatedTime = 0,
def __str__(self):
return "国内现有确诊%d,较昨日增加%d,无症状%d,较昨日增加%d,\n现有疑似%d,较昨日增加%d,现有重症%d" \
"较昨日增加%d\n累计确诊%d,较昨日增加%d,境外输入%d,较昨日增加%d\n累计治愈%d" \
"较昨日增加%d,累计死亡%d,较昨日增加%d"%(self.curConfirm,self.curConfirmRelative,
self.asymptomatic,self.asymptomaticRelative,self.unconfirmed,
self.unconfirmedRelative,self.icu,self.icuRelative,self.confirmed,
self.confirmedRelative,self.overseasInput,self.overseasInputRelative,
self.cured,self.curedRelative,self.died,self.diedRelative)
#国外疫情概况
class OutsideChina():
def __init__(self):
self.confirmed = 0,
self.curConfirm = 0,
self.confirmedRelative = 0,
self.cured = 0,
self.curedRelative = 0,
self.died = 0,
self.diedRelative = 0,
self.updatedTime = 0,
def __str__(self):
return "截止%s,国外累计确诊%d,现存确诊%d,昨日新增%d,治愈%d,昨日治愈%d,累计死亡%d,昨日死亡%d"%(self.updatedTime,self.confirmed,self.curConfirm,
self.confirmedRelative,self.cured,self.curedRelative,self.died,self.diedRelative)
#国外国家疫情信息
class ForeignCountry():
def __init__(self):
self.died = 0,
self.confirmed = 0,
self.crued = 0,
self.country = '',
self.curConfirm = 0,
self.confirmedRelative = 0,
self.pub_date = '',
def __str__(self):
return "%s, 累计确诊%d,现存确诊%d,累计死亡%d,累计治愈%d,昨日新增%d"%(self.country,self.confirmed,self.curConfirm,self.died,self.crued,self.confirmedRelative)
class SaveToDB():
def __init__(self,user='root',password='root',host='127.0.0.1',port=3306,database='xinguan'):
#指定数据库连接参数
self.user=user
self.password=password
self.host=host
self.port=port
self.databse=database
self.conn=pymysql.connect(
user=self.user,
host=self.host,
port=self.port,
password=self.password,
database='xinguan',
autocommit=True
)
def connect(self):
self.conn = pymysql.connect(
user=self.user,
host=self.host,
port=self.port,
password=self.password,
database='xinguan',
autocommit=True
)
curser=self.conn.cursor()
curser.execute('insert into ForeignCountry(confirmed,'
'died,crued,country,curConfirm,confirmedRelative,pub_data) '
'values(1,1,1,"英国",1,1,"2020-10-18 10:00:00");')
self.__rule('ForeignCountry')
curser.execute('select * from ForeignCountry;')
data=curser.fetchall()
frame=pd.DataFrame(list(data),columns=['id','confirmed','died','crued','country','curConfirm','curConfirmRelative','pubdate'])
print(frame['country'])
curser.close()
self.conn.close()
def InsertIntoProvince(self,data):
#param data list(tuple),每个元组即一个省的信息
#首先删掉数据库中当日的数据
cursor=self.conn.cursor()
insertTime=data[0][-1]
#删掉同一天的数据
deletesql='delete from ProvinceTable where Date(pub_date)=Date("%s");'%(insertTime)
cursor.execute(deletesql)
#设置ID从最小开始
self.__rule('ProvinceTable')
for i in range(len(data)):
sql='INSERT INTO ProvinceTable(confirmed,confirmedRelative,died,diedRelative,crued,curedRelative,' \
'asymptomatic,asymptomaticRelative,curConfirm,curConfirmRelative,icuDisable,area,pub_date) values(%d,' \
'%d,%d,%d,%d,%d,%d,%d,%d,%d,%d,"%s","%s");'%data[i]
cursor.execute(sql)
cursor.close()
def InsertToCity(self,data):
#首先删掉数据库中当日的数据
cursor=self.conn.cursor()
insertTime=data[0][-1]
#删掉同一天的数据
deletesql='delete from CityTable where Date(pub_date)=Date("%s");'%(insertTime)
cursor.execute(deletesql)
#设置ID从最小开始
self.__rule('CityTable')
for i in range(len(data)):
sql='insert into CityTable(cityName,provinceName,confirmed,died,cured,confirmedRelative,' \
'curConfirm,pub_date) values("%s","%s",%d,%d,%d,%d,%d,"%s");'%data[i]
cursor.execute(sql)
cursor.close()
def InsertForeignCountry(self,data):
#首先删掉数据库中当日的数据
cursor=self.conn.cursor()
insertTime=data[0][-1]
#删掉同一天的数据
deletesql='delete from ForeignCountry where Date(pub_date)=Date("%s");'%(insertTime)
cursor.execute(deletesql)
#设置ID从最小开始
self.__rule('ForeignCountry')
for i in range(len(data)):
sql='insert into ForeignCountry(confirmed,died,crued,country,curConfirm,' \
'confirmedRelative,pub_date) values(%d,%d,%d,"%s",%d,%d,"%s");'%(data[i])
try:
cursor.execute(sql)
except:
pass
cursor.close()
#删除某些元组后ID可能出现中断手动调整ID连续从最小ID开始
def __rule(self,tablename):
curser=self.conn.cursor()
curser.execute('set @i=0;')
curser.execute('update %s set id=(@i:=@i+1);'%tablename)
curser.execute('alter table %s auto_increment=0;'%tablename)

@ -0,0 +1,202 @@
import time
import requests
import re
import json
from bs4 import BeautifulSoup
from DataFrame import *
class Spider():
def __init__(self):
self.url=''
self.headers={"user-agent":"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36"}
self.updateTime=''
#抓取国内各省市的信息
def grapProvince(self):
data=requests.get(self.url,headers=self.headers)
data.encoding='utf-8'
html=data.text
#构建soup对象
soup=BeautifulSoup(html,'html.parser')
#查找目标标签
tag=soup.find('script', attrs={'id':'captain-config'})
tagstr=tag.string
#提取出各省疫情信息
caselist=re.findall(r'"caseList":\[(\{.*?\})\],"dataSource"',tagstr)
#转换成json对象
provincesinfo=re.findall(r'({"confirmed".*?\]})',caselist[0])
#保存所有省疫情信息
provinces=[]
provincesTupes=[]
citiesTuples=[]
for i in range(34):
pro=json.loads(provincesinfo[i])
province=Porvince()
province.area=pro['area']
province.confirmedRelative=int(pro['confirmedRelative'])
province.confirmed=int(pro['confirmed'])
province.crued=int(pro['crued'])
province.died=int(pro['died'])
province.curConfirmRelative=int(pro['curConfirmRelative'])
province.curConfirm=int(pro['curConfirm'])
province.diedRelative=int(pro['diedRelative'])
province.curedRelative=int(pro['curedRelative'])
province.asymptomatic=int(self.dealData(pro,'asymptomatic'))
province.asymptomaticRelative=int(self.dealData(pro,'asymptomaticRelative'))
province.icuDisable=int(pro['icuDisable'])
province.relativeTime=self.changeTime(pro['relativeTime'])
province.pub_date=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
#将上面的信息组成一个元组,方便插入数据库
ptuple=(province.confirmed,province.confirmedRelative,province.died,province.diedRelative,province.crued,
province.curedRelative,province.asymptomatic,province.asymptomaticRelative,province.curConfirm,
province.curConfirmRelative,province.icuDisable,province.area,province.pub_date)
provincesTupes.append(ptuple)
province.subList=[]
#处理城市信息,并加入到该省的信息中
citysinfo=pro['subList']
cities=re.findall(r'(\{.*?\})',str(citysinfo))
print(province)
for city in cities:
city=str(city).replace('\'',"\"")
cj=json.loads(city)
citysinfo=CityInfo()
citysinfo.city=cj['city']
citysinfo.confirmed=int(cj['confirmed'])
#需要对缺失数据进行处理
if cj['died']=='':
citysinfo.died=0
else:
citysinfo.died=int(cj['died'])
if cj['crued']=='':
citysinfo.cured=0
else:
citysinfo.cured=int(cj['crued'])
citysinfo.confirmedRelative=int(cj['confirmedRelative'])
try:
if cj['curConfirm']=='':
citysinfo.curConfirm=0
else:
citysinfo.curConfirm=int(cj['curConfirm'])
except:
citysinfo.curConfirm = 0
province.subList.append(citysinfo)
ctuple=(citysinfo.city,province.area,citysinfo.confirmed,citysinfo.died,citysinfo.cured,citysinfo.confirmed,
citysinfo.curConfirm,province.pub_date)
citiesTuples.append(ctuple)
print(citysinfo)
print('-----------------------------------------------------------')
return (provincesTupes,citiesTuples)
#j=json.loads(caselist[0])
#抓取国外疫情信息
def grapForeign(self):
data=requests.get(self.url,headers=self.headers)
data.encoding='utf-8'
html=data.text
#构建soup对象
soup=BeautifulSoup(html,'html.parser')
#查找目标标签
tag=soup.find('script', attrs={'id':'captain-config'})
tagstr=tag.string
globallist=re.findall(r'"globalList":\[(.*?)\],"allForeignTrend"',tagstr)
countries=re.findall(r'({"died":.*?"country".*?\})',str(globallist[0]))
foreigns=[]
foreignTuples=[]
for country in countries:
coun=json.loads(country)
foreign=ForeignCountry()
foreign.died=int(coun['died'])
foreign.confirmed=int(coun['confirmed'])
foreign.crued=int(coun['crued'])
foreign.country=coun['country']
foreign.curConfirm=int(coun['curConfirm'])
foreign.confirmedRelative=int(coun['confirmedRelative'])
foreign.pub_date=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
foreigns.append(foreign)
ftuples=(foreign.confirmed,foreign.died,foreign.crued,foreign.country,
foreign.curConfirm,foreign.confirmedRelative,foreign.pub_date)
foreignTuples.append(ftuples)
return foreignTuples
#抓取国外疫情信息概况
def grapSummaryForeign(self):
data=requests.get(self.url,headers=self.headers)
data.encoding='utf-8'
html=data.text
#构建soup对象
soup=BeautifulSoup(html,'html.parser')
#查找目标标签
tag=soup.find('script', attrs={'id':'captain-config'})
tagstr=tag.string
#国外疫情信息
summaryDataIn=re.findall(r'"summaryDataOut":(\{.*?\})',tagstr)
#转换为json
DataOut=json.loads(summaryDataIn[0])
Outside=OutsideChina()
Outside.confirmed=int(DataOut['confirmed'])
Outside.curConfirm=int(DataOut['curConfirm'])
Outside.confirmedRelative=int(DataOut['confirmedRelative'])
Outside.cured=int(DataOut['cured'])
Outside.curedRelative=int(DataOut['curedRelative'])
Outside.died=int(DataOut['died'])
Outside.diedRelative=int(DataOut['diedRelative'])
Outside.updatedTime=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
print(Outside)
#抓取国内疫情信息概况
def grapSummaryChina(self):
data=requests.get(self.url,headers=self.headers)
data.encoding='utf-8'
html=data.text
#构建soup对象
soup=BeautifulSoup(html,'html.parser')
#查找目标标签
tag=soup.find('script', attrs={'id':'captain-config'})
tagstr=tag.string
#国内疫情信息
summaryDataIn=re.findall(r'"summaryDataIn":(\{.*?\})',tagstr)
#转换为json
DataIn=json.loads(summaryDataIn[0])
Inside=InsideChina()
Inside.curConfirm=int(DataIn['confirmed'])
Inside.died=int(DataIn['died'])
Inside.cured=int(DataIn['cured'])
Inside.asymptomatic=int(DataIn['asymptomatic'])
Inside.asymptomaticRelative=int(DataIn['asymptomaticRelative'])
Inside.unconfirmed=int(DataIn['unconfirmed'])
Inside.unconfirmedRelative=int(DataIn['unconfirmedRelative'])
Inside.confirmed=int(DataIn['confirmed'])
Inside.confirmedRelative=int(DataIn['confirmedRelative'])
Inside.curedRelative=int(DataIn['curedRelative'])
Inside.diedRelative=int(DataIn['diedRelative'])
Inside.icu=int(DataIn['icu'])
Inside.icuRelative=int(DataIn['icuRelative'])
Inside.overseasInput=int(DataIn['overseasInput'])
Inside.overseasInputRelative=int(DataIn['overseasInputRelative'])
Inside.curConfirmRelative=int(DataIn['curConfirmRelative'])
Inside.updatedTime=time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time()))
print(Inside)
def dealData(self,a,b):
try:
if a[b]=='':
return 0
else:
return a[b]
except:
return 0
#转换时间格式
def changeTime(self,t):
localt=time.localtime(float(t)/1000)
timestr = time.strftime("%Y-%m-%d %H:%M:%S", localt)
return timestr

@ -0,0 +1,12 @@
from GrapData import Spider,SaveToDB
def main():
spider=Spider()
spider.url='https://voice.baidu.com/act/newpneumonia/newpneumonia/'
spider.grapProvince()
savedb=SaveToDB()
foreignData=spider.grapForeign()
savedb.InsertForeignCountry(foreignData)
if __name__ == '__main__':
main()

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

@ -10,7 +10,7 @@ create table ForeignCountry(
country varchar(30) unique,
curConfirm int,
confirmedRelative int,
pub_data char(20)
pub_data DATETIME not null
);
create table InsideChina(
@ -31,7 +31,7 @@ create table InsideChina(
curedRelative int,
died int,
diedRelative int,
updateTime char(30) not null
updateTime DATETIME not null
);
create table OutsideChina(
@ -55,6 +55,7 @@ create table CityTable(
cured int,
confirmedRelative int,
curConfirm int,
pub_date DATETIME,
foreign key(provinceName) references ProvinceTable(area)
);
@ -71,7 +72,7 @@ create table ProvinceTable(
curConfirm int,
icuDisable int,
area varchar(10) unique,
pub_date char(30)
pub_date DATETIME not null
);

@ -1,7 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ChangeListManager">
<list default="true" id="8571b19d-c61f-4136-bb50-f489db667f91" name="Default Changelist" comment="" />
<list default="true" id="8571b19d-c61f-4136-bb50-f489db667f91" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
@ -22,7 +24,7 @@
</component>
<component name="PropertiesComponent">
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="last_opened_file_path" value="$PROJECT_DIR$" />
<property name="last_opened_file_path" value="$PROJECT_DIR$/../../数据存储" />
<property name="settings.editor.selected.configurable" value="com.jetbrains.python.configuration.PyActiveSdkModuleConfigurable" />
</component>
<component name="RunManager">
@ -79,26 +81,34 @@
<servers />
</component>
<component name="WindowStateProjectService">
<state width="1814" height="535" key="GridCell.Tab.0.bottom" timestamp="1596550669416">
<state x="676" y="200" width="624" height="704" key="FileChooserDialogImpl" timestamp="1596593470272">
<screen x="67" y="27" width="1853" height="1053" />
</state>
<state width="1814" height="535" key="GridCell.Tab.0.bottom/67.27.1853.1053@67.27.1853.1053" timestamp="1596550669416" />
<state width="1814" height="535" key="GridCell.Tab.0.center" timestamp="1596550669412">
<state x="676" y="200" width="624" height="704" key="FileChooserDialogImpl/67.27.1853.1053@67.27.1853.1053" timestamp="1596593470272" />
<state width="1814" height="535" key="GridCell.Tab.0.bottom" timestamp="1596559560562">
<screen x="67" y="27" width="1853" height="1053" />
</state>
<state width="1814" height="535" key="GridCell.Tab.0.center/67.27.1853.1053@67.27.1853.1053" timestamp="1596550669412" />
<state width="1814" height="535" key="GridCell.Tab.0.left" timestamp="1596550669410">
<state width="1814" height="535" key="GridCell.Tab.0.bottom/67.27.1853.1053@67.27.1853.1053" timestamp="1596559560562" />
<state width="1814" height="535" key="GridCell.Tab.0.center" timestamp="1596559560560">
<screen x="67" y="27" width="1853" height="1053" />
</state>
<state width="1814" height="535" key="GridCell.Tab.0.left/67.27.1853.1053@67.27.1853.1053" timestamp="1596550669410" />
<state width="1814" height="535" key="GridCell.Tab.0.right" timestamp="1596550669414">
<state width="1814" height="535" key="GridCell.Tab.0.center/67.27.1853.1053@67.27.1853.1053" timestamp="1596559560560" />
<state width="1814" height="535" key="GridCell.Tab.0.left" timestamp="1596559560559">
<screen x="67" y="27" width="1853" height="1053" />
</state>
<state width="1814" height="535" key="GridCell.Tab.0.right/67.27.1853.1053@67.27.1853.1053" timestamp="1596550669414" />
<state width="1814" height="535" key="GridCell.Tab.0.left/67.27.1853.1053@67.27.1853.1053" timestamp="1596559560559" />
<state width="1814" height="535" key="GridCell.Tab.0.right" timestamp="1596559560561">
<screen x="67" y="27" width="1853" height="1053" />
</state>
<state width="1814" height="535" key="GridCell.Tab.0.right/67.27.1853.1053@67.27.1853.1053" timestamp="1596559560561" />
<state x="67" y="27" width="1521" height="1053" key="SettingsEditor" timestamp="1596506197631">
<screen x="67" y="27" width="1853" height="1053" />
</state>
<state x="67" y="27" width="1521" height="1053" key="SettingsEditor/67.27.1853.1053@67.27.1853.1053" timestamp="1596506197631" />
<state x="481" y="302" key="com.intellij.ide.util.TipDialog" timestamp="1596593461059">
<screen x="67" y="27" width="1853" height="1053" />
</state>
<state x="481" y="302" key="com.intellij.ide.util.TipDialog/67.27.1853.1053@67.27.1853.1053" timestamp="1596593461059" />
<state x="475" y="27" width="1009" height="1049" key="search.everywhere.popup" timestamp="1596534337665">
<screen x="67" y="27" width="1853" height="1053" />
</state>

Loading…
Cancel
Save