虚拟主机与云服务器有什么区别,我们应该如何选择

虚拟主机已经有了一段时间的历史,近几年随着其技术的不断成熟,以及其低廉的价格,成为众多站长的首选对象。但近两年云计算的出现,衍生出云服务器这个产物。这时,很多站长便对虚拟主机与云服务器应该如何选择感到困扰,不知是选择技术比较成熟的虚拟主机,还是选择*新的云服务器。

虚拟主机与云服务器的区别:

虚拟主机是利用虚拟技术将一台物理服务器划分成多个“虚拟”服务器,虚拟主机的出现大大节省了服务器硬件的成本,所以虚拟主机租用价格比较便宜。虚拟主机的关键技术在于,即使在同一台硬件、同一个操作系统上,运行着为多个用户打开的不同的服务器程式,也互不干扰。并且每一台虚拟主机的表现和独立主机并没有什么差别。虚拟主机也有其缺点,由于是多个用户共享一台服务器,所以其访问速度及流量便受到一定的限制。

云服务器又称云主机,是一种简单高效、安全可靠、处理能力可弹性伸缩的计算服务。云主机具有具有独立的宽带和IP,用户可以根据需求自主安装各种操作系统和配置相应的运行环境,可以按需购买,升级方面也比较灵活。此外,云主机还提供双重备份,这样数据安全又多了一份保障。

从上述二者的介绍来看,虚拟主机和云服务器都有其各自的特点,在安全和灵活性方面,云服务器要强于虚拟主机,但价格方面比虚拟主机要高。所以我们出于网站的发展前景及成本的考虑,可以选择合适的主机来进行搭建。

虚拟主机与云服务器应该如何选择:

1、如果你的网站暂时不能带来利益且成本比较少,建议选择虚拟主机,因为其低廉的价格,是草根站长们的首要选择。

2、如果你的网站对安全性要求不是很高,那么可以选择虚拟主机,因为在安全防护方面,云主机要高于虚拟主机。

3、如果你是技术小白,可以选择虚拟主机,诸如软件配置、防病毒、防攻击等安全措施都由专业服务商提供,租用虚拟主机通常只需要几分钟的时间就可以开通,网站建设的效率非常高,用户无需具备技术能力。

4、如果你对服务器方面的预算比较高,而且也不确定网站发展的速度,那么可以选择云服务器,因为虚拟主机性能限制比较严,像流量限制、空间限制等,当网站发展到一定规模后,虚拟主机性能就会成为网站发展的障碍。而云服务器则不存在这样的问题。

虚拟主机与云服务器是两个不同类型的主机,其实无论选择哪种,只有适合网站的才是*好的。我们在选择服务器时,一定检测其访问速度与稳定性,因为其决定着网站能否正常运行以及网站的SEO优化效果。

云计算获取*大效益,需要了解的几个小技巧

如何才能成功地实施云计算并获取*大效益呢?以下是我们为您提供的小贴士:

1.确定您的方案供应商对数据存储的安全

当外部服务供应商为您进行数据存储时,您应该评估他们如何确保数据安全性。云计算服务供应商通常配备一流的安全防护装置,符合国际安全标准,并且由专门的技术人才进行安全管理。当您与一个云计算服务供应商接洽时,需要审查该供应商的安全标准和管理模式,你也可以要求现场访问供应商的数据中心以确保数据安全性。

2.确定公司哪些数据需要被列入云计划

在使用云计算服务之前,您应该和公司的关键利益相关者共同审度出哪些数据可以被列入云计划托管。同时,您也应该考虑到云计算服务供应商的安全防护标准和自己公司的隐私保护政策。

3.审查服务水平协议

即使大多数云服务提供商提供高可用性的基础设备,仍有可能出现服务中断现象。因而,您必须应该透彻了解所选择的云服务供应商如何保证服务的可用性。如您需要满足一个持续支持并关键的服务,可以考虑和一个跨领域云服务供应商合作,或者寻求多个云服务供应商。

4.研发一套数据备份与修复的策略

数据是应用系统*重要的资产要素。无论该应用系统由您公司亲自管理或是通过云服务管理,完备和精密的数据备份或数据修复系统设计可以确保数据不会丢失。您必须清楚地了解您的云服务供应商的数据备份与修复程序。如果该服务具备强大的数据提取功能,您应经常导出和备份相应数据。

5.遵照区域性的数据保密规定

云计算的服务模式是将数据存储在一个虚拟环境中,并且可以在多个国家的服务器间进行数据存储和传输。有些国家设立法律规定公司必须将公司数据保存在国内。不管该数据是归本国公司所有或是归外国公司所有,某些国家的政府也有权检验国内服务供应商的数据中心內存储的信息。请务必遵照国家或是服务供应商在存储资源所在国的相关法律要件。

想要保证云计算安全,需要遵守哪些基本原则

1、确认现有的基础控制

基础控制是企业安全理念的核心。它们包含了将近60个保护您企业*重要资产的安全控制。它们专注在确保云技术对您业务的应用,以及您的操作是符合安全控制。

2、专注工作负载

云安全、企业信用直接与工作负载相关。每个工作负载都有独特的考虑,如管理因素和用户的依赖关系。通过对工作负载的重点关注,您可以制定一个更有针对性的安全计划,比传统的操作提供更安全的保障。

3、尽早建立共识

很多时候云技术不被合伙人重视。因此,重要的安全细节可能被忽略,从而导致整合与可用性成为问题。成功实施云安全的关键是项目相关人要心中有数,商定好利弊。

4、实施一个风险缓解计划

云部署往往涉及一些内部和外部的缔约方。企业应制定一个成文的风险缓解计划,允许管理员和员工在云端迅速处理问题。该计划应包括风险的文件,对这些风险的响应,同时也应包括教育和培训。

5、不要忘了图像管理

许多云应用都会用到虚拟化功能。企业应落实图像存储的管理流程,确保只有适当的图像是主动可用的。还有一点很重要,所有已部署的图像都要被正确识别和管理,以防止图像扩张。

6、进行安全评估

云计算是复杂的。迁移云技术之前,企业应首先评估应用程序和基础设施的安全漏洞,并确保所有的安全控制都到位且运行正常。道德黑客只是辅助方式,企业应以此检查他们云应用程序的常见漏洞。

7、充分利用安全服务

新的安全服务已经步入市场,在同类产品中它使企业达到*佳的安全性,无需通常的开销。例如入侵防护领域,访问和身份管理,安全事件日志管理为企业抛弃现有资源压力实现安全目标提供了机会。

8、制定一个弹性计划

随着企业采用基于云的技术,他们还应该看看他们的弹性需求。没有一种技术是完美的,云计算亦如此。确保工作负载,如果想在一场灾难或攻击事件中迅速恢复这是至关重要的步骤。要谨慎确保工作负载可以随时恢复,与业务连续性的影响微乎其微。

9、积*监视性能

未能正确地监测云的实施,可能导致在性能上的满意度和安全问题。实施积*的监测方案发现任何可能影响云实施成功的威胁。

10、遵循云的生命周期模型

安全不只是一个时间点的事情,而是需要持续的进行,企业必须勤于云技术管理和定期审查安全性。

11、评估供应商

要分析该公司传播那些与物理安全,逻辑安全,加密,更改管理和业务持续性以及灾难恢复等属于同类型控件的能力。同样,还要验证涉及有证明备份和灾难程序等处理的供应商。

12、考虑一种混合安全模式

将云中提供的服务与预置的服务混合起来。这样有助于减轻数据保护,隐私保护的压力。

从事云计算方面的工作,云计算常见的职位和所需技能

近年来,许多IT专业人员都已经对简历进行了整理,并调整了技能以从事云计算方面的工作。

云行业持续快速地增长。根据Gartner的报告,公有云服务市场在2017年将增长18%,达到2486亿美元,高于2016年的2092亿美元。各种规模的企业继续迁移到云端,以利用新的服务和技术。但是,他们需要合适的云计算人才能满足他们的业务需求。

想要从事云计算方面的工作,但不知道从哪里开始吗?*步是看一些流行的云的角色,并了解雇主对他们的期望。然后,了解您的简历上需要什么,如何获取相关经验以及如何回答雇主在面试中提出的一些难题。

在这里总结了云计算的一些常见职业以及他们所需的技能:

云管理员

企业需要一个人来配置云部署并执行管理和监控任务。那个人就是云管理员。通过培训和认证获得的坚实的知识基础,可以为您在云计算领域的职业做好准备——但要确保您的技能是的。

管理员的大部分工作是云基础设施管理,所以雇主将询问您的云管理体验,以及您熟悉的工具和平台。了解核心的云平台,监控工具和配置管理系统,如Ansible和Zenoss。面试官希望您能够展示如何使用这些工具来解决问题并提高用户体验,因此需要提供真实的案例。

企业继续拥抱公有和混合云模型。准备好探讨将工作负载合并到公共云以及这样做的好处。

云架构师

云架构师要考虑到大局:他们监督云计算策略,包括采用计划,应用设计和管理。由于云技术不断变化,云架构师必须了解当前趋势,以保证环境能够有效运行。

企业希望他们的架构师能够设计永不过时的系统。从长远考虑企业在三年或三年以上的云战略。你设计的路线越好,企业为未来做的准备就越好。

跨平台应用可移植性是企业面临的一个大问题,所以在面试中可能会出现关于容器体验的问题。云架构师需要了解容器的功能以及它们如何适应云策略。

此外,诸如OpenStack等开源平台是想要自定义云的公司的热门选择。查看供应商以及供应商中立的认证,努力实现云计算的这一职业生涯。

云安全管理员

安全性始终是企业的首要关注点,云安全管理员的作用是保持云部署的安全。准备迎接挑战性的面试。正式的培训和认证,如信息系统安全专家认证,是简历的重要方面。虽然坚实的教育基础很重要,但雇主希望听到您在现实世界中如何使用这些技能。

从事云计算安全性工作涉及到很多方面。您必须证明您能够设计,执行和维护各种云基础架构的云安全策略。云系统面临的威胁和风险日益改变,所以管理员必须不断监控环境。跟踪云安全趋势并掌握不同的工具和流程,如加密,访问控制和多重身份验证。

管理人员必须具备良好的沟通能力,为组织内的员工制定政策,并且了解管控和合规性标准(如PCIDSS)。

云应用开发人员

企业开发和部署软件的方式随着云计算的发展而不断变化。由于这些变化,企业对云应用开发人员的要求也越来越多;他们希望开发人员也能够承担通常是架构师,工程师,分析师和技术人员等角色所承担的任务。不过,候选人还需要具有编程方面的教育背景——请务必查看潜在的雇主使用哪些语言,并将其添加到您的任务仓库中。

获得主流云平台(如AmazonWebServices,Google和Azure)的实际开发经验。随着多云开始出现,熟悉各种平台以及它们之间的互操作性将为您带来好处。

雇主需要确保您是适合他们企业的较佳选择,所以他们会询问您的开发过程。您使用的管理和开发工具越多,面试官就越可以评估您是否能够转换到他们的工具集上。

强调自动化的重要性,特别是在处理DevOps,持续集成和持续交付时。敏捷模型在企业中很受欢迎,因此这些模型的经验以及不同部门和角色之间的合作能力是一个很大的优势。

接口测试练习

接口测试练习

1.使用csv文件读取url,data等参数

2.使用csv打印接口测试结果报告

import requests
import csv

class workflow_frogetpassword_v6_test():
def userinterface_test(self,url,userinfo,expresult,interfacename):
#定义字典数据,存储实际接口响应结果和测试结论
resultdata={}
#发送请求获取响应
response=requests.post(url,data=userinfo).text
r=response.find(expresult)
resultdata[‘接口实际返回’]=response
# print(response)
if r>0:
print(interfacename,’ok’)
resultdata[‘测试结果’]=’测试通过’
else:
print(interfacename,’bad’)
resultdata[‘测试结果’]=’测试失败’
# print(resultdata)
return resultdata
#定义函数执行写入报告结果
def result_report(self,reportfilename,interfacename,resultdata):
file=open(reportfilename,’a’)
#报告前加上接口名称
file.write(interfacename+’,’)
for key,value in resultdata.items():
file.write(key+’,’+value+’,’)
file.write(‘\n’)
file.close()

if __name__ == ‘__main__’:
workflowobj=workflow_frogetpassword_v6_test()
file = open(‘interface_test.csv’, ‘r’)
table = csv.reader(file)
#逐行读取
for row in table:
url = row[1]
expresult = row[3]
interfacename = row[5]
# print(interfacename)
userinfo = {}
#设置空字典
resultdata={}
j = int(row[6])
for i in range(7, 2 * j + 7, 2):
userinfo[row[i]] = row[i + 1]
#传入数据,接受方法的return,注意这里获取userinfo后调用函数
resultdata=workflowobj.userinterface_test(url,userinfo,expresult,interfacename)
#结果写入报告
workflowobj.result_report(‘testresult3.csv’,interfacename,resultdata)

利用列表计算乘车区间Python

利用列表计算乘车区间Python

【问题描述】

将书上的站点数据,改用无锡地铁一号线的站点,可以复制以下字符串

”堰桥、锡北运河、西漳、天一、刘潭、庄前、民丰、无锡火车站、胜利门、三阳广场、南禅寺、谈渡桥、太湖广场、清名桥、人民医院、华清大桥、扬名、南湖家园、塘铁桥、金匮公园、市民中心、文化宫、江南大学、长广溪”

利用split()得到一个列表

并首先输出如下信息:

无锡一号线站点[‘堰桥’, ‘锡北运河’, ‘西漳’, ‘天一’, ‘刘潭’, ‘庄前’, ‘民丰’, ‘无锡火车站’, ‘胜利门’, ‘三阳广场’, ‘南禅寺’, ‘谈渡桥’, ‘太湖广场’, ‘清名桥’, ‘人民医院’, ‘华清大桥’, ‘扬名’, ‘南湖家园’, ‘塘铁桥’, ‘金匮公园’, ‘市民中心’, ‘文化宫’, ‘江南大学’, ‘长广溪’]

再根据下面的输入形式提示用户输入进出站点

再输出计算得到的结果,格式参考下面的样例输出

【输入形式】

请输入进站和出站站点,用逗号隔开

【输出形式】

【样例输入】

‘市民中心’,‘长广溪’

【样例输出】

无锡一号线站点

[‘堰桥’, ‘锡北运河’, ‘西漳’, ‘天一’, ‘刘潭’, ‘庄前’, ‘民丰’, ‘无锡火车站’, ‘胜利门’, ‘三阳广场’, ‘南禅寺’, ‘谈渡桥’, ‘太湖广场’, ‘清名桥’, ‘人民医院’, ‘华清大桥’, ‘扬名’, ‘南湖家园’, ‘塘铁桥’, ‘金匮公园’, ‘市民中心’, ‘文化宫’, ‘江南大学’, ‘长广溪’]

请输入进站和出站站点,用逗号隔开’市民中心’,‘长广溪’

从市民中心站到长广溪站需要乘坐3站

或者

无锡一号线站点

[‘堰桥’, ‘锡北运河’, ‘西漳’, ‘天一’, ‘刘潭’, ‘庄前’, ‘民丰’, ‘无锡火车站’, ‘胜利门’, ‘三阳广场’, ‘南禅寺’, ‘谈渡桥’, ‘太湖广场’, ‘清名桥’, ‘人民医院’, ‘华清大桥’, ‘扬名’, ‘南湖家园’, ‘塘铁桥’, ‘金匮公园’, ‘市民中心’, ‘文化宫’, ‘江南大学’, ‘长广溪’]

请输入进站和出站站点,用空格隔开江南大学 市民中心

从江南大学站到市民中心站需要反向乘坐2站

【Python代码】

s = “堰桥、锡北运河、西漳、天一、刘潭、庄前、民丰、无锡火车站、胜利门、三阳广场、南禅寺、谈渡桥、太湖广场、清名桥、人民医院、华清大桥、扬名、南湖家园、塘铁桥、金匮公园、市民中心、文化宫、江南大学、长广溪”
X = list(s.split(‘、’))
print(“无锡一号线站点”)
print(X)
print(“请输入进站和出站站点,用逗号隔开”,end=””)
str1 = input().split(‘,’)
n1 = len(X)
for i in range(n1):
#eval()函数是为了去除引号,因为str1[]输出的带有引号’文化宫’,而
#X[]输出的不带引号,不去除无法相等
if eval(str1[0]) == X[i]:
x = i
if eval(str1[1]) == X[i]:
y = i
n = y-x
if n > 0:
print(“从{}站到{}站需要乘坐{}站”.format(eval(str1[0]),eval(str1[1]),n))
else:
print(“从{}站到{}站需要反向乘坐{}站”.format(eval(str1[0]),eval(str1[1]),-n))

 

41_Pandas使用数据透视表计算每个类别的统计信息

41_Pandas使用数据透视表计算每个类别的统计信息

41_Pandas使用数据透视表计算每个类别的统计信息
通过使用pandas.pivot_table()函数,可以实现与电子表格软件(例如Excel)的数据透视表功能相同的处理。

可以通过对分类数据的每个类别(分类数据,定性数据)进行分组(分组)来检查和分析定量数据统计信息(平均值,总计,*大值,*小值,标准差等)。
分别准备了一个名为pandas.crosstab()的函数,以汇总每个类别的出现次数和频率(也可以使用pivot_table())。

40_Pandas中crosstab进行交叉制表(计算每个类别的出现次数和频率)
这里,将对以为内容予以描述。

pandas.pivot_table()函数的基本用法
计算每个类别的小计/总计:参数边距
指定如何计算结果值:参数aggfunc
指定是否排除原始数据的缺失值NaN:参数dropna
我们将以泰坦尼克号的生存信息数据为例。

import numpy as np
import pandas as pd

df = pd.read_csv(‘./data/41/train.csv’, index_col=0).drop([‘Name’, ‘Ticket’, ‘SibSp’, ‘Parch’], axis=1)

print(df.head())
# Survived Pclass Sex Age Fare Cabin Embarked
# PassengerId
# 1 0 3 male 22.0 7.2500 NaN S
# 2 1 1 female 38.0 71.2833 C85 C
# 3 1 3 female 26.0 7.9250 NaN S
# 4 1 1 female 35.0 53.1000 C123 S
# 5 0 3 male 35.0 8.0500 NaN S

pandas.pivot_table()函数的基本用法
pandas.pivot_table()函数需要以下三个参数。

data(*个参数):指定原始数据的pandas.DataFrame对象。
index:指定原始数据的列名。它成为结果行标题。
columns:指定原始数据的列名称。它成为结果列标题。
计算未在参数索引和列中指定的列的平均值作为结果。此时,将排除其数据类型不是数字的列。稍后将描述计算平均值以外的值的方法。
print(pd.pivot_table(df, index=’Pclass’, columns=’Sex’))
# Age Fare Survived
# Sex female male female male female male
# Pclass
# 1 34.611765 41.281386 106.125798 67.226127 0.968085 0.368852
# 2 28.722973 30.740707 21.970121 19.741782 0.921053 0.157407
# 3 21.750000 26.507589 16.118810 12.661633 0.500000 0.135447

pandas.pivot_table()函数返回pandas.DataFrame。

print(type(pd.pivot_table(df, index=’Pclass’, columns=’Sex’)))
# <class ‘pandas.core.frame.DataFrame’>

此外,如果在参数值中指定了原始数据的列名,则仅计算该列的结果。

print(pd.pivot_table(df, index=’Pclass’, columns=’Sex’, values=’Age’))
# Sex female male
# Pclass
# 1 34.611765 41.281386
# 2 28.722973 30.740707
# 3 21.750000 26.507589

也可以在参数索引,列,值中指定原始数据的列名列表。结果以多索引(分层索引)pandas.DataFrame的形式返回。

print(pd.pivot_table(df, index=[‘Sex’, ‘Pclass’], columns=’Survived’, values=[‘Age’, ‘Fare’]))
# Age Fare
# Survived 0 1 0 1
# Sex Pclass
# female 1 25.666667 34.939024 110.604167 105.978159
# 2 36.000000 28.080882 18.250000 22.288989
# 3 23.818182 19.329787 19.773093 12.464526
# male 1 44.581967 36.248000 62.894910 74.637320
# 2 33.369048 16.022000 19.488965 21.095100
# 3 27.255814 22.274211 12.204469 15.579696

计算每个类别的小计/总计:参数margins
如果参数margin为True,则可以计算每个类别的结果(小计)和整体结果(总计)。

print(pd.pivot_table(df, index=’Sex’, columns=’Pclass’, values=’Age’, margins=True))
# Pclass 1 2 3 All
# Sex
# female 34.611765 28.722973 21.750000 27.915709
# male 41.281386 30.740707 26.507589 30.726645
# All 38.233441 29.877630 25.140620 29.699118

可以通过参数margins_name指定小计/总行标签/列标签。默认为“all”。

print(pd.pivot_table(df, index=’Sex’, columns=’Pclass’, values=’Age’,
margins=True, margins_name=’Total’))
# Pclass 1 2 3 Total
# Sex
# female 34.611765 28.722973 21.750000 27.915709
# male 41.281386 30.740707 26.507589 30.726645
# Total 38.233441 29.877630 25.140620 29.699118

指定如何计算结果值:参数aggfunc
默认情况下,将计算平均值,但是如果您为参数aggfunc指定函数,则可以通过其他方法计算该值。
默认情况下(省略参数aggfunc时),指定numpy.mean()。

print(pd.pivot_table(df, index=’Sex’, columns=’Pclass’, values=’Age’,
margins=True, aggfunc=np.min))
# Pclass 1 2 3 All
# Sex
# female 2.00 2.00 0.75 0.75
# male 0.92 0.67 0.42 0.42
# All 0.92 0.67 0.42 0.42

还可以在参数aggfunc中指定函数列表。

print(pd.pivot_table(df, index=’Sex’, columns=’Pclass’, values=’Age’,
margins=True, aggfunc=[np.min, np.max]))
# amin amax
# Pclass 1 2 3 All 1 2 3 All
# Sex
# female 2.00 2.00 0.75 0.75 63.0 57.0 63.0 63.0
# male 0.92 0.67 0.42 0.42 80.0 70.0 74.0 80.0
# All 0.92 0.67 0.42 0.42 80.0 70.0 74.0 80.0

指定的函数可以是返回一维数组的标量值的函数。不限于NumPy函数,例如,Python的内置函数len()返回一维数组中的元素数是可以的。

print(pd.pivot_table(df, index=’Sex’, columns=’Pclass’, values=’Age’,
margins=True, aggfunc=len))
# Pclass 1 2 3 All
# Sex
# female 94.0 76.0 144.0 261.0
# male 122.0 108.0 347.0 453.0
# All 186.0 173.0 355.0 714.0

可以使用len()计算每个类别的出现次数,但是如上所述,还单独准备了一个称为crosstab()的函数。使用crosstab(),可以将结果标准化(标准化)为1。

40_Pandas中crosstab进行交叉制表(计算每个类别的出现次数和频率)
指定是否排除原始数据的缺失值NaN:参数dropna
上面使用len()的示例的总值小于原始数据的数量。这是由于处理了缺失值NaN。

print(len(df))
# 891

print(df.isnull().sum())
# Survived 0
# Pclass 0
# Sex 0
# Age 177
# Fare 0
# Cabin 687
# Embarked 2
# dtype: int64

有关如何计算丢失的NaN的数量,请参阅以下文章。

35_Pandas计算满足特定条件的元素的数量
如果参数dropna为False,则计算所有元素。

print(pd.pivot_table(df, index=’Sex’, columns=’Pclass’, values=’Age’,
margins=True, aggfunc=len, dropna=False))
# Pclass 1 2 3 All
# Sex
# female 94.0 76.0 144.0 314.0
# male 122.0 108.0 347.0 577.0
# All 216.0 184.0 491.0 891.0

如果将NaN处理留给pivot_table(),则可能会得到意外的结果,因此可能更安全一些,例如排除NaN或在原始数据时将其替换为另一个值。

05_Pandas删除,替换并提取其中的缺失值NaN

python保存csv时出现中文乱码

python保存csv时出现中文乱码

1.问题描述
在pycharm中用下面代码保存成csv格式时候,结果出现中文乱码

open(‘数据.csv’,mode=’a’,encoding=’utf-8′,newline=”)
1
2.问题解决
在网上搜索找到一个办法可以有效解决

将encoding=‘utf-8’ 改为 encoding=‘utf-8-sig’

3. 问题产生原因
以前没有遇到过这种解决的方法,对两者区别产生了好奇,又进行了搜索,整理如下:(反正我是看不懂orz)

1、”utf-8“ 是以字节为编码单元,它的字节顺序在所有系统中都是一样的,没有字节序问题,因此它不需要BOM,所以当用”utf-8″编码方式读取带有BOM的文件时,它会把BOM当做是文件内容来处理, 也就会发生类似上边的错误。

2、“utf-8-sig”中sig全拼为 signature 也就是”带有签名的utf-8”, 因此”utf-8-sig”读取带有BOM的”utf-8文件时”会把BOM单独处理,与文本内容隔离开,也是我们期望的结果。

参考链接来源:https://blog.csdn.net/qq_40258748/article/details/96306878
https://blog.csdn.net/qq_39248703/article/details/80175976

python_4多数据处理

python_4多数据处理

一、字符串
·索引

>>>a=‘python’
>>>a[0]
’p’
>>>a[-3]
‘h’

·切片

>>>a=‘Ilovepython’
>>>a[0:5]
“ILove”//0~4
>>>s[-6:]
‘python’//到*后一位
>>>s[:5]
‘Ilove’//0~4
>>>s[1:9:2]
‘LvPt’//从1开始到8,每两个取一个

·查找
1>index()
str.index(sub[,start[,end]])
sub要查找的
start开始的位置
end结束位置

>>>a=‘python is funny’
>>>a.index(‘n’,6,13)//在[6,13)范围内找‘n’1
未找到会显示输出异常
2>find()
不同:当查找匹配不成功,返回-1

·求长度
len()方法

·连接操作用
‘+’
‘join’(’sep’.join(sep))
sep分隔符,seq表示元素序列
’*‘实现字符串复制连接

·分割操作
str.split(sep,num).[n]
sep:分隔符
num:分割n次

>>>str=‘www.hrs.edu.cn’
>>>str.split()
[‘www.hrs.edu.cn’]
>>>str.split(‘.’)
[‘www’,’hrs’,’edu’,’cn’]
>>>str.split(‘.’,2)
[‘www’,’hrs’,’edu.cn’]
>>>str.split(‘.’)[1]
[‘hrs’]

·统计

str.count(sub.[start,[end]])
其中,
sub:需要统计的子串
start:表示字符串开始搜索的位置,可省略
end:结束位置

>>>everyday=‘Nothing is impossible’
>>>everyday.count(‘i’)

>>>everyday.count(i,5)

print(‘我什么都不会放弃,包括你。’)
print(‘致G姑娘。’)

python-输入数据处理与列表、元组、字典、random

python-输入数据处理与列表、元组、字典、random

python-输入数据处理与列表、元组、字典
一、输入数据处理
形式一
形式二
二、字符串
三、列表
四、元组
五、字典
六、随机生成数-random
一、输入数据处理
在笔试的过程中遇到编程题我们经常遇到一些需要自己处理输入数据的情况,现在我将它们整理如下:
一般情况下我都会把输入数据处理存放在列表中。

形式一
“””
形式如下:
2 3 4
2,3,4
“””
input_my =list(map(int,input().split()))
input_my1 =list(map(int,input().split(‘,’)))

运行结果如下所示:

形式一解释:

# 此解释针对python3
1、map()函数
s1 = map(x,y)
s2 = list(map(x,y))
s1返回为 ‘迭代器’
s2返回为 ‘列表’;此列表是用x方法对y的各个元素进行处理然后返回存储在列表中

2、split()方法
s1 = ‘23 45 64’.split(‘x’,y)
首先表示以‘x’对字符串进行分割y次
其次s1返回为 ‘列表’,每个元素为字符

形式一就表示:首先对输入以’x’进行分割,并转化为int类型

形式二
“””
形式如下:
3 3

2 3 4
1 2 3
4 5 6
表示:输入3组数,每组3个数
“””
total =list(map(int,input().split()))

result = []
for i in range (0,total[0]):
input_my =list(map(int,input().split()))
if len(input_my) == total[1]:
result.append(input_my)
else:
raise ValueError(“本组输入数据与预设个数不符”)

运行结果如下:

其他形式将持续更新。。。

二、字符串
字符串常见操作整理如下:

s1 = ‘abcdefg-‘
s2 = ‘123456’

# 字符串拼接
s = s1 + s2 # abcdefg-123456

# 字符串切片;[]左闭右开
# s:abcdefg-123456
res = s[1:5] # abcde

res = s[len(s):7:-1] # 654321

res = s[::2] # aceg135

res = s[::-1] # 654321-gfedcba

res = s.split(‘-‘) # [‘abcdefg’, ‘123456’]

# 字符串运算
res = s * 2 # abcdefg-123456abcdefg-123456

res = s[0] # a

# f-string
w = {‘name’: ‘百度’, ‘url’: ‘www.baidu.com’,’port’:’8080′}
res = f'{w[“name”]}: {w[“url”]}:{w[“port”]}’ # 百度: www.baidu.com:8080

# 字符串内建函数
res = s.capitalize() #Abcdefg-123456 ;将*个字母转化为大写

res = s.count(‘-‘) # 1 ;计数‘-’,出现的次数

res = s.endswith(‘-‘) # False
res = s.endswith(“6”) # True ;判断是否以某结尾
res = s.startswith(‘a’) # True
res = s.startswith(‘b’) # True ;判断是否以某开始

res = s.index(‘-‘) # 7
res = s.index(‘0’) # 抛出异常
res = s.find(‘-‘) # 7
res = s.find(‘0’) # -1 ;返回字符索引

res = s.isalnum() # False ;字符串是由字母或数字组成
res = s.isalpha() # False ;字符串是由字母组成
res = s.isdigit() # False ;字符串是由数字组成
res = s.isnumeric() # False ;字符串是由数字字符组成
res = s.isdecimal() # False
“””
isdigit()
True: Unicode数字,byte数字(单字节),全角数字(双字节),罗马数字
False: 汉字数字
Error: 无

isdecimal()
True: Unicode数字,,全角数字(双字节)
False: 罗马数字,汉字数字
Error: byte数字(单字节)

isnumeric()
True: Unicode数字,全角数字(双字节),罗马数字,汉字数字
False: 无
Error: byte数字(单字节)
“””

res = s.join(‘+++’) # +abcdefg-123456+abcdefg-123456+

res = s.replace(‘-‘,’+’) # abcdefg+123456

res = s.rstrip() # abcdefg-123456 ;删除字符串末尾的空格

三、列表
列表常用操作整理如下:列表元素可变,可增、删、改

lst1 = [1,2,3,4]
lst2 = [‘a’,’b’,’c’,’d’]

# 增加
# 1、append(1)
lst = [0,0,0,0]
lst.append(“a”) # [0,0,0,0,’a’]
lst.append(lst1) # [0,0,0,0,’a’, [1, 2, 3, 4]]

# 2、insert()
lst = [0,0,0,0]
lst.insert(1,2) # [0, 2, 0, 0, 0]
lst.insert(2,lst1) # [0, 2, [1, 2, 3, 4], 0, 0, 0]

# 3、extend()
lst = [0,0,0,0]
lst.extend(1) # 异常
lst.extend(‘1’) # [0, 0, 0, 0, ‘1’]
lst.extend(lst1) # [0, 0, 0, 0, ‘1’, 1, 2, 3, 4]
lst = lst + lst2 # [0, 0, 0, 0, ‘1’, 1, 2, 3, 4, ‘a’, ‘b’, ‘c’, ‘d’]

# 删除
lst = [1,2,3,4,5]
lst.pop() # [1, 2, 3, 4]
lst.remove(2) # [1, 3, 4]
del lst[1] # [1, 4]
lst.clear() # [] ;清空列表

# 修改
lst = [3,3,4,5,3,2,1]
lst.sort() # [1, 2, 3, 3, 3, 4, 5] ;排序
lst.reverse() # [5, 4, 3, 3, 3, 2, 1] ;反转

# 查找
lst = [3,3,4,5,3,2,1]
lst.index(3) # 0 ;返回*个3出现的索引
lst.count(3) # 3 ;返回3的个数

# 其他
# 1、赋值
lst = [0,0,0,0]
lst_new1 = lst # [0, 0, 0, 0]
lst_new2 = lst.copy() # [0, 0, 0, 0]

lst[2] = 10
lst_new1 # [0, 0, 10, 0]
lst_new2 # [0, 0, 0, 0]
print(lst_new1)
print(lst_new2)

# 2、切片
lst = [1, 1, 2, 2, 3, 5, 34]

res = lst[2:len(lst):2] # [2, 3, 34]
res = lst[1:] # [1, 2, 2, 3, 5, 34]
res = lst[::-1] # [34, 5, 3, 2, 2, 1, 1]
# 常用的字符串操作在列表中均适用

四、元组
元组常用操作整理如下:元组元素不变,不可增、删、改

# 创建字典若元素只有一个时,为不引起歧义,必须在其后加上逗号
tup = (10,)

# 查找
tup = (2,3,4,32,2,2,2,4,5,6,7,5)
res = tup.index(2) # 0
res = tup.count(2) # 4

# 切片
tup = tup[0:3] # (2, 3, 4)
tup = tup[::-1] # (5, 7, 6, 5, 4, 2, 2, 2, 32, 4, 3, 2)

## 利用切片和构造新元组实现元组的增、删、改
## 首先它可以’+’
tup1 = (1,2,3,4)
tup2 = (‘a’,’b’,’c’)
tup = tup1 + tup2 # (1, 2, 3, 4, ‘a’, ‘b’, ‘c’)

tup = (1,2,3,4,5,6)
### 增加,在索引为2的位置加入 99
tup = tup[:2] + (99,) + tup[2:] # (1, 2, 99, 3, 4, 5, 6)

### 修改,将索引为2的数字改为 99
tup = tup[:2] + (99,) + tup[3:] # (1, 2, 99, 4, 5, 6)

### 删除,将索引为3的数字删除
tup = tup[:3] + tup[4:] # (1, 2, 3, 5, 6)
del tup # NameError: name ‘tup’ is not defined ;删除元组

五、字典
字典常用操作整理如下:

# 字典
# 创建字典
student1 = {‘clas’:’计科18′,’name’:’小红’} # {‘clas’: ‘计科18’, ‘name’: ‘小红’}
student2 = dict( clas =’信息18′, name = ‘小明’) # {‘clas’: ‘信息18’, ‘name’: ‘xiaoming ‘}

student = {‘clas’:’计科18′,’name’:’小红’}
# 修改字典
student[‘clas’] = ‘信息18’ # {‘clas’: ‘信息18’, ‘name’: ‘小红’}

# 添加字典
student[‘id’] = ‘001’ # {‘clas’: ‘信息18’, ‘name’: ‘小红’, ‘id’: ‘001’}

# 删除字典
del student[‘clas’] # {‘name’: ‘小红’, ‘id’: ‘001’}
del student # NameError: name ‘student’ is not defined ;删除字典

# ·遍历字典
student = {‘clas’: ‘信息18’, ‘name’: ‘小红’, ‘id’: ‘001’}
for key,value in student.items():
print(key,’:’,value)
“””
输出为:
clas : 信息18
name : 小红
id : 001
“””
for key in student.keys(): # clas-name-id-
print(key,end=’-‘)

for value in student.values(): # 信息18-小红-001-
print(value,end = ‘-‘)

# ·字典的嵌套
## 字典嵌套进列表
student1 = {‘clas’:’计科18′,’name’:’小红’,’id’:’001′}
student2 = {‘clas’:’计科18′,’name’:’小黑’,’id’:’002′}
student3 = {‘clas’:’计科18′,’name’:’小白’,’id’:’003′}

student = [student1,student2,student3]
# [{‘clas’: ‘计科18’, ‘name’: ‘小红’, ‘id’: ‘001’}, {‘clas’: ‘计科18’, ‘name’: ‘小黑’, ‘id’: ‘002’}, {‘clas’: ‘计科18’, ‘name’: ‘小白’, ‘id’: ‘003’}]

## 列表嵌套进字典
student_name = [‘小红’,’小黑’,’小白’]
student_clas = [‘计科18′,’计科18′,’计科18’]
student_id = [‘001′,’002′,’003’]
student = {‘name’:student_name,’clas’:student_clas,’id’:student_id}
# {‘name’: [‘小红’, ‘小黑’, ‘小白’], ‘clas’: [‘计科18’, ‘计科18’, ‘计科18’], ‘id’: [‘001’, ‘002’, ‘003’]}
student[‘name’][1] # 小黑

## 字典嵌套进字典
student1 = {‘clas’:’计科18′,’name’:’小红’,’id’:’001′}
student2 = {‘clas’:’计科18′,’name’:’小黑’,’id’:’002′}
student3 = {‘clas’:’计科18′,’name’:’小白’,’id’:’003′}

student = {‘information1′:student1,’information2′:student2,’information3’:student3}
# {‘information1’: {‘clas’: ‘计科18’, ‘name’: ‘小红’, ‘id’: ‘001’}, ‘information2’: {‘clas’: ‘计科18’, ‘name’: ‘小黑’, ‘id’: ‘002’}, ‘information3’: {‘clas’: ‘计科18’, ‘name’: ‘小白’, ‘id’: ‘003’}}
student[‘information1’][‘name’] # 小红

六、随机生成数-random
random模块常用随机生成数字整理如下:

import random
# 随机生成1-10的浮点数
res = random.uniform(1,10) # 2.2597718045640427

# 随机生成1-10的整数
res = random.randint(1,10) # 9
# 随机生成1-9的整数
res = random.randrange(1,10) # 5

# 随机选择一个数
res = random.choice([1,2]) # 0
# 随机选择多个数
res = random.choices([1,2,3,4,5],weights=[0.1,0.2,0.3,0.5,0.4],k=3) # [4, 5, 2]
# weights是权重,k是次数,可不加权重
res = random.choices([1,2,3,4,5],k=3) # [3, 2, 3]
print(res)