皮皮网

【extjs c 源码】【代挂源码上传】【郭天祥例程源码】python管理系统源码csdn_python 管理系统

时间:2024-12-29 10:17:24 来源:出售游戏平台源码 作者:好商城v5源码下载

1.如何从网上获取各编程语言的管理管理源代码
2.python常用代码?
3.为何PYTHON人马要大战CSDN?
4.2022CSDN Python+Selenium- 环境搭建最详细教程
5.Python+mysql+tkinter+matplotlib的可视化学生成绩管理系统课程设计(文末附源码)
6.PYTHON人马大战CSDN免费专区:帮助你快速掌握PYTHON编程技能!

python管理系统源码csdn_python 管理系统

如何从网上获取各编程语言的系统系统源代码

       可以到专业的源码下载站去找你需要的源码。

       比如:

       csdn.net downcode.com pudn.com

       这类网站挺多,源码都是管理管理有源码的,可以直接查阅代码,系统系统使用代码。源码extjs c 源码

python常用代码?

       Python中的常用内置函数有哪些呢?

       ï¼ˆ1)Lambda函数

       ç”¨äºŽåˆ›å»ºåŒ¿åå‡½æ•°ï¼Œå³æ²¡æœ‰åç§°çš„函数。它只是一个表达式,函数体比def简单很多。当我们需要创建一个函数来执行单个操作并且可以在一行中编写时,就可以用到匿名函数了。

       Lamdba的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

       åˆ©ç”¨Lamdba函数,往往可以将代码简化许多。

       ï¼ˆ2)Map函数

       ä¼šå°†ä¸€ä¸ªå‡½æ•°æ˜ å°„到一个输入列表的所有元素上,比如我们先创建了一个函数来返回一个大写的输入单词,然后将此函数应有到列表colors中的所有元素。

       æˆ‘们还可以使用匿名函数lamdba来配合map函数,这样可以更加精简。

       ï¼ˆ3)Reduce函数

       å½“需要对一个列表进行一些计算并返回结果时,reduce()是个非常有用的函数。举个例子,当需要计算一个整数列表所有元素的乘积时,即可使用reduce函数实现。

       å®ƒä¸Žå‡½æ•°çš„最大的区别就是,reduce()里的映射函数(function)接收两个参数,而map接收一个参数。

       ï¼ˆ4)enumerate函数

       ç”¨äºŽå°†ä¸€ä¸ªå¯éåŽ†çš„数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在for循环当中。

       å®ƒçš„两个参数,一个是序列、迭代器或其他支持迭代对象;另一个是下标起始位置,默认情况从0开始,也可以自定义计数器的起始编号。

       ï¼ˆ5)Zip函数

       ç”¨äºŽå°†å¯è¿­ä»£çš„对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表

       å½“我们使用zip()函数时,如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同。

       python必背入门代码是什么

       python必背入门代码列举如下:

       1、大写第一个字母。以下代码块会使用title()方法,从而大写字符串中每一个单词的首字母。

       s="programmingisawesome"

       print(s.title())

       #ProgrammingIsAwesome

       2、字符元素组成判定。检查两个字符串的组成元素是不是一样的。

       fromcollectionsimportCounter

       defanagram(first,管理管理second):

       returnCounter(first)==Counter(second)

       anagram("abcd3","3acdb")#True

       3、打印N次字符串。该代码块不需要循环语句就能打印N次字符串。

       n=2

       s="Programming"

       print(s*n)

       #ProgrammingProgramming

       æƒ³äº†è§£æ›´å¤šæœ‰å…³python的详情,推荐咨询达内教育。达内教育致力于面向IT互联网行业,培养软件开发工程师、测试工程师、UI设计师、网络营销工程师、会计等职场人才,目前已在北上海广深等个大中城市成立了家学习中心;更是与多家企业签订人才培养协议,全面助力学员更好就业。感兴趣的话点击此处,免费学习一下

Python常用的正则表达式处理函数详解

       æ­£åˆ™è¡¨è¾¾å¼æ˜¯ä¸€ä¸ªç‰¹æ®Šçš„字符序列,用于简洁表达一组字符串特征,检查一个字符串是否与某种模式匹配,使用起来十分方便。

       åœ¨Python中,我们通过调用re库来使用re模块:

       importre

       ä¸‹é¢ä»‹ç»Python常用的正则表达式处理函数。

       re.match函数

       re.match函数从字符串的起始位置匹配正则表达式,返回match对象,如果不是起始位置匹配成功的话,match()就返回None。

       re.match(pattern,string,flags=0)

       pattern:匹配的正则表达式。

       string:待匹配的字符串。

       flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。具体参数为:

       re.I:忽略大小写。

       re.L:表示特殊字符集\w,\W,\b,\B,\s,\S依赖于当前环境。

       re.M:多行模式。

       re.S:即.,并且包括换行符在内的任意字符(.不包括换行符)。

       re.U:表示特殊字符集\w,\W,\b,\B,\d,\D,\s,\S依赖于Unicode字符属性数据库。

       re.X:为了增加可读性,忽略空格和#后面的注释。

       import?re#从起始位置匹配r1=re.match('abc','abcdefghi')print(r1)#不从起始位置匹配r2=re.match('def','abcdefghi')print(r2)

       è¿è¡Œç»“果:

       å…¶ä¸­ï¼Œspan表示匹配成功的整个子串的索引。

       ä½¿ç”¨group(num)或groups()匹配对象函数来获取匹配表达式。

       group(num):匹配的整个表达式的字符串,group()可以一次输入多个组号,这时它将返回一个包含那些组所对应值的元组。

       groups():返回一个包含所有小组字符串的元组,从1到所含的小组号。

       import?res='This?is?a?demo'r1=re.match(r'(.*)?is?(.*)',s)r2=re.match(r'(.*)?is?(.*?)',s)print(r1.group())print(r1.group(1))print(r1.group(2))print(r1.groups())print()print(r2.group())print(r2.group(1))print(r2.group(2))print(r2.groups())

       è¿è¡Œç»“果:

       ä¸Šè¿°ä»£ç ä¸­çš„(.*)和(.*?)表示正则表达式的贪婪匹配与非贪婪匹配。

       re.search函数

       re.search函数扫描整个字符串并返回第一个成功的匹配,如果匹配成功则返回match对象,否则返回None。

       re.search(pattern,string,flags=0)

       pattern:匹配的正则表达式。

       string:待匹配的字符串。

       flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

       import?re#从起始位置匹配r1=re.search('abc','abcdefghi')print(r1)#不从起始位置匹配r2=re.search('def','abcdefghi')print(r2)

       è¿è¡Œç»“果:

       ä½¿ç”¨group(num)或groups()匹配对象函数来获取匹配表达式。

       group(num=0):匹配的整个表达式的字符串,group()可以一次输入多个组号,这时它将返回一个包含那些组所对应值的元组。

       groups():返回一个包含所有小组字符串的元组,从1到所含的小组号。

       import?res='This?is?a?demo'r1=re.search(r'(.*)?is?(.*)',s)r2=re.search(r'(.*)?is?(.*?)',s)print(r1.group())print(r1.group(1))print(r1.group(2))print(r1.groups())print()print(r2.group())print(r2.group(1))print(r2.group(2))print(r2.groups())

       è¿è¡Œç»“果:

       ä»Žä¸Šé¢ä¸éš¾å‘现re.match与re.search的区别:re.match只匹配字符串的起始位置,只要起始位置不符合正则表达式就匹配失败,而re.search是匹配整个字符串,直到找到一个匹配为止。

       re.compile函数

       compile函数用于编译正则表达式,生成一个正则表达式对象,供match()和search()这两个函数使用。

       re.compile(pattern[,flags])

       pattern:一个字符串形式的正则表达式。

       flags:可选,表示匹配模式,比如忽略大小写,多行模式等。

       import?re#匹配数字r=re.compile(r'\d+')?r1=r.match('This?is?a?demo')r2=r.match('This?is??and?That?is?',0,)r3=r.match('This?is??and?That?is?',8,)?print(r1)print(r2)print(r3)

       è¿è¡Œç»“果:

       findall函数

       æœç´¢å­—符串,以列表形式返回正则表达式匹配的所有子串,如果没有找到匹配的,则返回空列表。

       éœ€è¦æ³¨æ„çš„是,match和search是匹配一次,而findall匹配所有。

       findall(string[,pos[,endpos]])

       string:待匹配的字符串。

       pos:可选参数,指定字符串的起始位置,默认为0。

       endpos:可选参数,指定字符串的结束位置,默认为字符串的长度。

       import?re#匹配数字r=re.compile(r'\d+')?r1=r.findall('This?is?a?demo')r2=r.findall('This?is??and?That?is?',0,)r3=r.findall('This?is??and?That?is?',0,)?print(r1)print(r2)print(r3)

       è¿è¡Œç»“果:

       re.finditer函数

       å’Œfindall类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

       re.finditer(pattern,string,flags=0)

       pattern:匹配的正则表达式。

       string:待匹配的字符串。

       flags:标志位,用于控制正则表达式的匹配方式,如是否区分大小写,多行匹配等。

       import?re?r=re.finditer(r'\d+','This?is??and?That?is?')for?i?in?r:?print?(i.group())

       è¿è¡Œç»“果:

       re.split函数

       å°†ä¸€ä¸ªå­—符串按照正则表达式匹配的子串进行分割后,以列表形式返回。

       re.split(pattern,string[,maxsplit=0,flags=0])

       pattern:匹配的正则表达式。

       string:待匹配的字符串。

       maxsplit:分割次数,maxsplit=1分割一次,默认为0,不限次数。

       flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等。

       import?re?r1=re.split('\W+','This?is??and?That?is?')?r2=re.split('\W+','This?is??and?That?is?',maxsplit=1)?r3=re.split('\d+','This?is??and?That?is?')?r4=re.split('\d+','This?is??and?That?is?',maxsplit=1)?print(r1)print(r2)print(r3)print(r4)

       è¿è¡Œç»“果:

       re.sub函数

       re.sub函数用于替换字符串中的匹配项。

       re.sub(pattern,repl,string,count=0,flags=0)

       pattern:正则中的模式字符串。

       repl:替换的字符串,也可为一个函数。

       string:要被查找替换的原始字符串。

       count:模式匹配后替换的最大次数,默认0表示替换所有的匹配。

       import?re?r='This?is??and?That?is?'#?删除字符串中的数字r1=re.sub(r'\d+','',r)print(r1)#?删除非数字的字符串?r2=re.sub(r'\D','',r)print(r2)

       è¿è¡Œç»“果:

       åˆ°æ­¤è¿™ç¯‡å…³äºŽPython常用的正则表达式处理函数详解的文章就介绍到这了,希望大家以后多多支持!

python必背入门代码是什么?

       python必背入门代码是Reversingastringusingslicingmy_string"ABCDE"reversed_string=my_string[::-1]print(reversed_string)。

       å½“你定义一个a=3的时候,系统在内存中会给a一个地址,而这个a就是代表一个门牌号,然后小3住在里面,当你要调用a的时候,就相当于你喊了一句:小3,出来玩儿了!当你改好了这个房子之后,门牌号a是不能改变的,但住在里面的小3是可以换人的,所以称之为变量,而不是恒量。

       python经历

       åœ¨çŸ¥ä¹Žå’ŒCSDN的圈子里,经常看到、听到一些python初学者说,学完基础语法后,不知道该学什么,学了也不知道怎么用,一脸的茫然。

       è¿‘日,CSDN的公众号推送了一篇博客,题目叫做《迷思:Python学到什么程度可以面试工作?》,真实反映了python程序员在成长过程中的一些困惑。从年开始接触python这门编程语言,从年开始单一使用python应对所有的开发工作,直至今天。

       å›žé¡¾è‡ªå·±çš„学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。本文所列举的这个模块,是我在工作和学习中用过的或者正在学习的,算是对自己过去年的学习总结。希望对处在迷茫中的程序员有所帮助。

python必背入门代码是什么?

       å…·ä½“如下:

       1、反转字符串:

       #Reversingastringusingslicing

       my_string="ABCDE”

       reversedstring=my_string[::-1]

       print(reversed_string)

       #output

       #EDCBA

       2、使用标题类:

       my_string="mynameischaitanyabaweja"

       newstring=mystring.title(

       print(new_string)

       #MyNameIschaitanyaBaweja

       3、查找字符串的唯一要素:

       my_string="aavvccccddddeee"

       temp_set=set(my_string)

       newstring=-join(temp_set)

       print(new_string)

       4、输出n次字符串或列表:

       n=3

       my_string="abcd"my_list=[1,2,3]

       print(my_string*n)

       print(my_list*n)

       importstreamlitasst

       5、列表解析:

       n=4

       my_list=[o]*n#[o,o,o,o]

       6、两个变量之间的交换值:

       original_list=[1,2,3,4]

       newlist=[2*xforxinoriginal_list]

       print(new_list)

       #[2,4,6,8]

       Python经常被用于Web开发。比如,通过mod_wsgi模块,Apache可以运行用Python编写的Web程序。Python定义了WSGI标准应用接口来协调Http服务器与基于Python的Web程序之间的通信。一些Web框架,如Django,TurboGears,web2py,Zope等,可以让程序员轻松地开发和管理复杂的Web程序。

       åœ¨å¾ˆå¤šæ“ä½œç³»ç»Ÿé‡Œï¼ŒPython是标准的系统组件。大多数Linux发行版以及NetBSD、OpenBSD和MacOSX都集成了Python,可以在终端下直接运行Python。

       åº”用范围:

       æœ‰ä¸€äº›Linux发行版的安装器使用Python语言编写,比如Ubuntu的Ubiquity安装器,RedHatLinux和Fedora的Anaconda安装器。

       GentooLinux使用Python来编写它的Portage包管理系统。Python标准库包含了多个调用操作系统功能的库。

       é€šè¿‡pywin这个第三方软件包,Python能够访问Windows的COM服务及其它WindowsAPI。

       ä½¿ç”¨IronPython,Python程序能够直接调用.NetFramework。一般说来,Python编写的系统管理脚本在可读性、性能、代码重用度、扩展性几方面都优于普通的shell脚本。

python新手代码有哪些?

       python新手代码有如下:

       defnot_empty(s)。

       returnsandlen(s。strip())0。

       #returnsands。strip()。

       #如果直接单写s。strip()那么s如果是None,会报错,因为None没有strip方法。

       #如果s是None,那么Noneand任何值都是False,直接返回false。

       #如果s非None,那么判定s。trip()是否为空。

       ç›¸å…³ç®€ä»‹ã€‚

       Python解释器易于扩展,可以使用C或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。

       å¹´æœˆï¼Œè¯­è¨€æµè¡ŒæŒ‡æ•°çš„编译器Tiobe将Python加冕为最受欢迎的编程语言,年来首次将其置于Java、C和JavaScript之上。

为何PYTHON人马要大战CSDN?

       近日,互联网上掀起一场轰动全球的系统系统大战,那就是源码"PYTHON人马大战CSDN"。本文将为您揭开这场惊天动地的管理管理对决的神秘面纱。

       这场大战的系统系统爆发引发了网络热议。我们将从技术、源码竞争和文化层面,管理管理深入分析PYTHON人马与CSDN之间的系统系统纷争。

       影响广泛的源码"PYTHON人马大战CSDN"不仅仅是一场对决,更是背后的故事。我们将揭示背后的动机和意图,剖析这场大战的来龙去脉。

       在技术领域的对决中,PYTHON人马与CSDN分别代表了不同的力量。我们将从技术实力和创新能力角度,代挂源码上传对两者进行对比和分析。

       网络上关于"PYTHON人马大战CSDN"的声音此起彼伏。我们将整理不同观点,展示大众对于这场对决的看法和态度。

       这场对决可能对技术生态和行业格局带来重大影响。我们将展望未来,探讨这场对决可能带来的变革和创新。

       此次对决也反映出技术世界的竞争和博弈。我们将从商业和竞争的角度,探讨这场对决所蕴含的商业策略和竞争模式。

       通过本文的阅读,您将深入了解"PYTHON人马大战CSDN"的背景、动机和影响。这场大战不仅仅是技术对决,更是一个涉及技术、商业和文化的综合性议题。

CSDN Python+Selenium- 环境搭建最详细教程

       Selenium是一个常用的Web应用程序UI测试框架,它支持跨编程语言和多浏览器执行测试。它的发展经历了三个阶段,从早期的郭天祥例程源码Selenium RC(繁琐的结构)到Selenium 2(整合WebDriver,支持Firefox等浏览器)再到Selenium 3(优化对Firefox的支持)。现在,Selenium 3是默认安装版本,推荐使用WebDriver进行自动化测试。

       环境搭建建议有初学者推荐的Python 2.7与Selenium 2配合Firefox 以下版本,以及更倾向于尝试新版本的Python 3.6与Selenium 3配合Firefox 以上。Selenium主要包含Selenium IDE(提供脚本录制功能)、Selenium Remote Control(RC,现在集成在WebDriver中)和WebDriver(更易使用,支持多浏览器和分布式执行)。

       以下是Python与Selenium环境的安装步骤:

       Python安装:推荐使用Python 3.7,官网下载并配置环境变量,确保Python添加到系统路径中。

       Selenium安装:通过pip命令行工具(如`pip install selenium`)安装。

       Chrome浏览器:从官方下载并安装,确保下载对应版本的Chrome驱动。

       Chrome驱动安装:根据Chrome浏览器版本(如.0..)下载对应的chromedriver.exe,并将其放置在Python安装目录的Scripts文件夹中。

       启动Chrome浏览器:通过编写脚本启动浏览器,确保URL完整。金钻飞扬源码

Python+mysql+tkinter+matplotlib的可视化学生成绩管理系统课程设计(文末附源码)

       开发工具使用了PyCharm专业版以及Python3.7,并结合MySQL8.0构建可视化学生成绩管理系统。

       需要获取源码、咨询或定制课程设计(包括但不限于C语言数据结构及Python)的读者,可以通过以下方式联系:

       访问指定链接并扫码添加QQ好友,或者直接添加QQ:。

       CSDN博客中,野指针的快乐博主提供了一系列Python、运维、KVM领域的课程设计资源,感兴趣的读者可以点击直达链接进行访问。

       系统的运行效果包括以下页面:

       主页面展示了整个系统的概览。

       教师端功能包含:

       登录后,教师可访问个人资料页面、学生查询页面、成绩查询页面以及成绩分析页面。

       成绩分析页面支持显示课程成绩统计图。

       各班级创建分析页面以图表形式展示成绩。

       班级综合成绩评定页面通过扇形图进行展示。

       此外,阅读项目的源码教师还可以在课程管理页面根据学院和考试方式添加或删除课程。

       Teacherpage.py文件包含教师端功能的实现代码。

       学生端功能则涉及登录、修改密码等操作,具体实现代码位于student.py文件中。

       数据库采用MySQL8.0,系统内创建的表和数据库结构支持成绩与科目的增删查改操作。

       Dao层代码负责与数据库交互,执行SQL语句以实现数据管理功能。

PYTHON人马大战CSDN免费专区:帮助你快速掌握PYTHON编程技能!

       PYTHON人马大战CSDN免费专区:帮助你快速掌握PYTHON编程技能。在互联网时代,编程语言的选择对于程序开发者来说至关重要。PYTHON作为一种简单易学、功能丰富且免费的编程语言,在业界享有广泛的应用。在CSDN免费专区,你可以找到大量关于PYTHON编程的学习资源和社区支持。本文将介绍PYTHON编程和CSDN免费专区,帮助你掌握PYTHON编程技能

PYTHON人马大战CSDN免费专区:帮助你快速掌握PYTHON编程技能

       为什么选择PYTHON?

       PYTHON作为一种高级编程语言,具有多种优点使其成为编程初学者和专业开发者的首选。首先,PYTHON语法简洁明了,易于阅读和理解。其次,PYTHON拥有丰富的库和模块,可以轻松实现各种功能和任务。此外,PYTHON还具有跨平台的特性,可以在多个操作系统上运行。最重要的是,PYTHON有着庞大的社区支持,你可以通过CSDN免费专区与其他PYTHON开发者交流和分享经验。

       PYTHON的应用领域

       PYTHON的应用范围广泛,涵盖了数据分析、人工智能、网络开发等多个领域。在数据分析领域,PYTHON可以通过使用Pandas、NumPy和Matplotlib等库来处理、分析和可视化大量数据。在人工智能领域,PYTHON的机器学习库(如Scikit-learn和TensorFlow)可以用于训练和部署机器学习模型。此外,PYTHON还可以进行网站开发、网络爬虫、游戏开发等任务。

       CSDN免费专区为你提供的支持

       CSDN免费专区是一个开发者学习和交流的社区。在CSDN免费专区,你可以找到大量关于PYTHON编程的教程、指南、案例分析等资源,帮助你快速掌握PYTHON编程技能。此外,你还可以加入PYTHON开发者社区,与其他开发者进行交流和讨论,分享你的经验和问题。

       PYTHON编程与CSDN免费专区为你提供了掌握PYTHON编程技能所需的一切资源和支持。无论你是初学者还是有经验的开发者,CSDN免费专区都将帮助你在PYTHON编程领域取得成功。

自学Python的四大网站,超实用

       å­¦ä¹ Python一定要去的四大网站

       1.Python.org

       Python官方网站,可以从这里下载、学习、使用Python。官方文档是最权威的学习资料。

       2.GitHub

       GitHub是通过Git进行版本控制的软件源代码托管服务平台,还提供一些方便社会化共同软件开发的功能。

       3.CSDN

       ä»¥CSDN为代表的一众国内博客站,除此还有开源中国、博客园等。站点的好处是包罗万象,不过后来评价越来越差。

       4.v2ex

       v2ex是一个汇集各种奇妙话题和流行动向的网站,每天必刷的程序员论坛,获取帮助很好用。

csdn上有哪些值得下载的资源?

       欢迎提问!若您想获取关于 Python、机器学习、人工智能的学习资源,以下推荐或许能帮到您。

       资源概览分为三大部分。第一部分为数学基础精讲,适合数学基础薄弱的朋友,确保学习机器学习理论前数学知识的过关。内容涉及高数、线性代数、概率论等基础。包含 G Python 从入门到精通的全套视频教程与经典书籍。

       第二部分面向 Python 基础不牢固或 Python 初学者,为他们提供系统的学习路径。包括 Python 基础篇教程(包含 课时及配套习题)、Python 入门与进阶课程。

       第三部分深入探讨深度神经网络,覆盖深度学习算法与编程实践。提供从编程入门到深度学习算法的精讲课程,包含 MATLAB 机器学习教程,内容丰富且实用。

       此外,关于人工智能、机器学习和大数据的电子书籍推荐,您可参考往期资源。点击文章底部查看。我们持续分享更多干货。

       第一部分:数学基础(共 课时)

       第二部分:Python 基础与数据分析

       1. Python 基础篇教程( 课时,内含习题)

       2. Python 入门与进阶

       第三部分:深度学习算法与编程实践

       1. 编程入门

       (1)MATLAB 与机器学习入门、进阶、提高( 课时,附代码、算法包及 PPT 课件)

       (2)深度学习 TensorFlow 教程(以易懂的教学视频著称)

       2. 基础精讲

       (1)原理精讲班( 课时)

       (2)基础一(讲解详细,适合初学者)

       (3)基础二(紧随基础一)

       3. 深度学习

       (1)深度神经网络深入研究( 课时,附 PPT 课件)

       (2)深度神经网络深入与强化( 课时,附 PPT 课件)

       自学 Python 和机器学习的旅程即将启程,大数据与人工智能的浪潮催促我们不断学习和提升。选择适合自己的学习方式,掌握知识,武装自己。

       线上视频学习有其独特优势,讲师往往拥有丰富的项目经验,能分享书本中无法学到的宝贵经验。同时,线上视频也存在局限,线下面对面交流能即时解决学习难题。因此,根据个人需求和学习能力选择最合适的资源与方法至关重要。

关键词:缓冲流源码

copyright © 2016 powered by 皮皮网   sitemap