python之核心数据类型点滴,字符串及其操作

phpexcel 在laravel 导出多少的时候出现假设数字过长则会展现科学计数法表示的难点!

1. 什么是字符串。

字符串用单引号(')或双引号(")括起来,同期选用反斜杠()转义特殊字符。

字符串是以单引号或然双引号括起来的轻松文本,借使急需打字与印刷引号自己须要在其前加转义。

二个字母或然多少个相符代表一个字符。

图片 1

image.png

这是6个字符 “I,',m,空格,O,K”。

  • 字符串的拼接
    例:a = '苦短', b = 'Python' ,输出'人生苦短,笔者用Python'

背景

在开采多少个简便后台分析总结的时候,因为涉及到了前边七个和后端接口进行联调的题目,并且前端首倘若选择Vue.js来有关支出,在选拔axios和地点的后端接口实行联调的时候境遇了七个跨域的标题。

如图示:

后边二个的伏乞接口:

图片 2

image.png

后端接口服务:

图片 3

image.png

图片 4

image.png

图片 5image.png

2. 如何定义字符串?

图片 6

image.png

  • 一对单引号和一对双引号效果完全等同;

  • 三对单引号和三对双引号效果一模二样。

  • 中间三对引号能够定义多行字符串,且不供给转义符转义特殊字符。

  1. 用“ ” 连接

标题陈说:

按理跨域即使后端不协助的话,要想前端完结央求管理,需求张开利用nginx转载管理。

唯独既然是地面调节和测量试验,大家后端直接打费用持就可以。
以下是bollte开启扶助跨域的代码:

图片 7

image.png

@hook('after_request')
def enable_cors():
    """
    钩子函数,处理请求路由之后需要做什么的事情
    :return:
    """
    response.headers['Access-Control-Allow-Origin'] = '*'

一旦你接纳的是get提交的话是没难题的:

图片 8

image.png

利用get提交没有增多

response.headers['Access-Control-Allow-Origin'] = '*'

会现出以下的不当

图片 9

image.png

增多后是:能够回到了数额结果

图片 10

image.png

可惜不幸的是:当你利用POST提交的时候照旧遭遇405不支持跨域的难题:

POST提交请求:
 C2S_Login (data) {
      // 登录
      return this.action_post('http://127.0.0.1:8189/api/user/login/',data)
    },

呼吁结果:

图片 11

image.png

难点浅析:

xhr.js:178 OPTIONS http://127.0.0.1:8189/api/user/login/ 405 (Method Not Allowed)

查看乞请对应的头顶新闻:

图片 12

image.png

自个儿付诸的是POST 怎么成为了OPTIONS

尝试把:

@post('/api/user/login/')
@get('/api/user/login/')
def callback():
    return web_helper.return_msg(200, '登入成功!')

变为:

@route('/api/user/login/', method='POST')
def callback():
    return web_helper.return_msg(200, '登入成功!')

缺憾如故极度:
按别的的方案管理:

def allow_cross_domain(fn):
    def _enable_cors(*args, **kwargs):
        # set cross headers
        response.headers['Access-Control-Allow-Origin'] = '*'
        response.headers['Access-Control-Allow-Methods'] = 'GET,POST,PUT,OPTIONS'
        allow_headers = 'Referer, Accept, Origin, User-Agent'
        response.headers['Access-Control-Allow-Headers'] = allow_headers
        if request.method != 'OPTIONS':
            # actual request; reply with the actual response
            return fn(*args, **kwargs)

    return _enable_cors


@route('/api/user/login/', method='POST')
@allow_cross_domain
def callback():
    return web_helper.return_msg(200, '登入成功!')

那会儿出现依旧405 不过不是说是跨域错误的主题材料,而是另一种错误!

图片 13

image.png

参考:
https://www.cnblogs.com/SilenceTom/p/6697484.html
修改了相应的装饰器可惜依旧那个!

def allow_cross_domain(fn):
    def _enable_cors(*args, **kwargs):
        # set cross headers
        response.headers['Access-Control-Allow-Origin'] = '*'
        response.headers['Access-Control-Allow-Methods'] = 'GET,POST,PUT,OPTIONS'
        allow_headers = 'Referer, Accept, Origin, User-Agent,X-Requested-With, Content-Type, X-File-Name'
        response.headers['Access-Control-Allow-Headers'] = allow_headers
        if request.method != 'OPTIONS':
            # actual request; reply with the actual response
            return fn(*args, **kwargs)

    return _enable_cors

最后不留意开采原本焕哥伦比亚大学佬已经把这么些题目的答案说了!!!多谢大佬!不然还真不知道怎么管理那难点!
难题化解的答案地址:https://www.cnblogs.com/EmptyFS/p/6895479.html

大神正是大神!建议我们都膜拜一下以此大神!也能够投入的她的群多多学习
越来越多内容,敬请观注他的博客哟,他写的一三种的bottle都以很不错的:
地址:http://www.cnblogs.com/EmptyFS/

作者按章程2拍卖今后post就周全再次回到了!:

图片 14

image.png

虚构修改源码的法子侵入比较强,不实惠后期扩张,大概把bottle给遗漏了!!全部最后依旧修改为了再钩子文件管理,按方案1的主意!

最后修改的的代码:

#!/usr/bin/evn python
# coding=utf-8

"""
Author = zyx
@Create_Time: 2017/11/30 18:12
@version: v1.0.0
@Contact: 308711822@qq.com
@File: main.py
@文件功能描述:
"""

import logging
import os
import sys

import bottle
from beaker.middleware import SessionMiddleware
from bottle import TEMPLATE_PATH
from bottle import default_app, run, hook, request, response, get, error, abort

from business_logic import api_offer

# 引入该项目所有用到的API接口
# from api_offer import config, proxy_address_multiple, order_code, order

from abase_framework_module.net_workers import web_helper
from abase_framework_module.cache_workers import redis_cache_helper as cache_helper
from business_logic.app_configs import redis_config

# from api_offer import app_configs

#############################################
# 初始化bottle框架相关参数----应用程序的主入口文件
# 调用的时候
#############################################

# 获取本脚本所在的路径
pro_path = os.path.split(os.path.realpath(__file__))[0]
sys.path.append(pro_path)

# 设置当前bottle运行提交的最大数据值为2M
bottle.BaseRequest.MEMFILE_MAX = 1024 * 1024 * 2

# 定义静态文件目录路径
static_path = os.path.join(pro_path, 'template')

# 定义模板路径
TEMPLATE_PATH.append(os.path.join(pro_path, 'template'))

# 如果不存在log文件夹, 则再当前脚本目录下创建log文件夹存放日志文件-
if not os.path.exists('log'):
    os.mkdir('log')

# 定义日志目录
log_path = os.path.join(pro_path, 'log')
# print('当前日志路径------', log_path)

# 定义日志输出格式-输出是信息等级的
logging.basicConfig(level=logging.INFO,
                    format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s',
                    filename="%s/info.log" % log_path,
                    filemode='a')

# 设置session参数
session_opts = {
    'session.type': 'file',
    'session.cookie_expires': 3600,
    'session.data_dir': '/tmp/sessions/order',
    'session.auto': True
}


def allow_cross_domain(fn):
    def _enable_cors(*args, **kwargs):
        # set cross headers
        response.headers['Access-Control-Allow-Origin'] = '*'
        response.headers['Access-Control-Allow-Methods'] = 'GET,POST,PUT,OPTIONS'
        allow_headers = 'Referer, Accept, Origin, User-Agent,X-Requested-With, Content-Type, X-File-Name'
        response.headers['Access-Control-Allow-Headers'] = allow_headers
        print('打印!!request.method!', request.method)
        if request.method == 'OPTIONS':
            # actual request; reply with the actual response
            print('打印!!!')
            response.close()
            return fn(*args, **kwargs)

    return _enable_cors


@hook('before_request')
def validate():
    """
    钩子函数,处理请求路由之前需要做什么的事情
    :return:
    """
    """使用勾子处理页面或接口访问事件"""
    # 让bottle框架支持jquery ajax的RESTful风格的PUT和DELETE等请求
    REQUEST_METHOD = request.environ.get('REQUEST_METHOD')
    HTTP_ACCESS_CONTROL_REQUEST_METHOD = request.environ.get('HTTP_ACCESS_CONTROL_REQUEST_METHOD')
    if REQUEST_METHOD == 'OPTIONS' and HTTP_ACCESS_CONTROL_REQUEST_METHOD:
        request.environ['REQUEST_METHOD'] = HTTP_ACCESS_CONTROL_REQUEST_METHOD

    if request.method == 'OPTIONS':
        # actual request; reply with the actual response
        print('打印!!!')
    # 获取当前访问的Url路径
    path_info = request.environ.get("PATH_INFO")
    # 过滤不用做任何操作的路由
    if path_info in ['/favicon.ico', '/check_err/', '/log/']:
        return ''
    # 记录客户端提交参数信息----实测是成功
    web_helper.write_request_log(path_info)


@hook('after_request')
@allow_cross_domain
def enable_cors():
    """
    钩子函数,处理请求路由之后需要做什么的事情
    :return:
    """
    pass
    # response.headers['Access-Control-Allow-Origin'] = '*'


@get('/favicon.ico')
def favicon():
    return ''


@get('/log/')
def callback():
    pass
    # """输出日志记录"""
    # if not const.IS_ONLINE:
    #     return static_file('info.log', root=log_path)


@error(500)
def miss(code):
    # ssh
    # 错误页面,一般来说,可以在网站制定一个404的HTML页面,然后用return template('404')去访问404这个页面
    return web_helper.return_msg(500, '服务器系统故障')


@error(404)
def miss(code):
    # 错误页面,一般来说,可以在网站制定一个404的HTML页面,然后用return template('404')去访问404这个页面
    return web_helper.return_msg(404, '接口不存在')


# 函数主入口
if __name__ == '__main__':

    # 初始化全局的redis缓存处理工具
    cache_helper.set_redis(redis_config.REDIS)
    app_argv = SessionMiddleware(default_app(), session_opts)
    run(app=app_argv, host='127.0.0.1', port=8189, debug=True, reloader=True)
else:
    # 初始化全局的redis缓存处理工具
    cache_helper.set_redis(redis_config.REDIS)
    # 初始化email发送参数
    # mail_helper.set_mail(const.MAIL)
    application = SessionMiddleware(default_app(), session_opts)

@post('/api/user/login/')
@get('/api/user/login/')
def callback():
    """获取短链接生成页面html"""
    return web_helper.return_msg(200, '登入成功!')

如何化解?互连网提供了艺术:1.空格对应字段加行空格

3. 字符串的转义

n:换行符

图片 15

image.png

:转义符

一心逃逸符r前缀

图片 16

image.png

转变字符的出格组合:

n表示换行
t表示制表符
\表示本身

借使字符串里面有相当多字符都亟需转义,就需求加相当多,为了简化,Python还允许用r''表示''内部的字符串暗中同意不转义:

图片 17

image.png

然则一旦字符串中蕴藏单引号,无法运用r转义。

  1. 点名叫字符类型setCellValueExplicit($cell, $rowValue,PHPExcel_Cell_DataType::TYPE_STRING);

4. 字符串的相间

a. split()操作

图片 18

image.png

两个空格当成多少个空格,

图片 19

image.png

maxsplit=#能够钦点分隔的次数。

图片 20

image.png

相隔符能够是任性字符串。

b. rsplit()操作

rsplit()是从右往左分隔

图片 21

image.png

当不用maxsplit= 时候,split和rsplit效果等同,可是split效用更加高。

c. splitlines

按行分割,况且重临结果,不带换行符。

图片 22

image.png

d. partition(从左到右)

总是回到叁个安慕希组,它按传入的分割符分割三遍。打字与印刷分割符的前半片段,分隔符本人和后半片段。

图片 23

image.png

e. rpartition(同partition,然则是从右到左。)

a = '苦短'
b = 'Python'
print('人生' a ',我用' b) 

图片 24image.png

5. 字符的深浅写转换

a. 小写转大写,upper()方法。

图片 25

image.png

b. 大写转小写,lower()方法。

图片 26

image.png

c. 首字母转大写,title()和capitalize()方法

图片 27

image.png

d. 忽略大小写,casefold()方法

图片 28

image.png

  1. 格式化字符串 %s

看对应的结果

6. 字符的修改

a. s.replace() 字符串的轮换,只好从左到右的替换。

图片 29

image.png

前面是旧的字符串,前面是新的字符串。

图片 30

image.png

增添第三参数,调控修改的个数。

图片 31

image.png

b. s. strip()方法,移除前后的空域(n,t,r)

图片 32

image.png

移除钦点的字符,可以钦定三个。

图片 33

image.png

lstrip()只移除侧边部分,

rstrip()只移除右边部分。

c. s.ljust(),s.rjust(),s.center()方法, 填充字符串。

填充侧边

图片 34

image.png

填充左侧

图片 35

image.png

填充两侧

图片 36

image.png

可以内定填充字符,不过不能钦定三个字符:

图片 37

image.png

证实:须求填写的尺寸=钦命的长短-原字符串长度,假使原字符串为8,用center()钦定的长度为9,则只填充左边。借使内定的上升的幅度小于等于原厂不做任何操作。

图片 38

image.png

图片 39image.png

7. 字符的探求

s.find

s.rfind

s.index

s.rindex

s.count

a. s.find(value,[start,[stop]]),查找不到就赶回-1。rfind()从右往左查找。

图片 40

image.png

b. s.index同find,如若搜索不到重回Value Error。

a = '苦短'
b = 'Python'
print('人生%s,我用%s'%(a,b))

一般能够了!But双击后边世

8. 字符串的剖断

a. s.startwith(value,[start,[stop]])方法

看清字符是或不是以有些为单词开端的,重回true或许false。

图片 41

image.png

空格也是字符串。

图片 42

image.png

也得以钦定范围开展相称。

图片 43

image.png

enumerate() 方法可以打字与印刷出字符串的目录及其值的相应关系。

图片 44

image.png

b. s.endswith(),用法同startwith()方法。

图片 45

image.png

c. s.is*

  1. ' '.join()方式,注意括号里是要连接的能够是字符串,列表,元组可迭代的,个中里面包车型客车成分,必得是字符,因为这几个艺术是字符拼接,前边' '里面是连接 后边各样字符串的字符,即用怎么着字符来连接;

图片 46image.png那是何许鬼?手动改成文本格式就从不难点!图片 47image.png

8. 字符串的拼凑

号拼接

图片 48

image.png

join拼接字符串

图片 49

image.png

join 和 拼接字符串难以决定格式

下边来修改代码:

if($rowValue>99999999999){ $rowValue .=' '; $this->setColumnFormat([$cell=>PHPExcel_Style_NumberFormat::FORMAT_TEXT]); }

安分守纪上边格式修改就能够点击后也不会变成科学计数法!

2. 字符串的格式化

字符串格式化是字符串拼接的一种手腕。

a = '苦短'
b = 'Python'
print(''.join(['人生',a,',','我用',b]))
1. printf style字符串格式化

图片 50

image.png

*证实:叁个占位符要求传入多个参数,当传入的参数和占位符个数不匹配的时候会报错。当传入的种类不相称时会油可是生“TpyeError”错误。

当占位符是s%时候,隐式的调用了str(),其扩散的可认为随机档案的次序;

当占位符是r%时候,隐式的调用了repr()方法。*

广阔的占位符:

  • s,获取传入对象的str主意的重返值,并将其格式化到钦命地方

  • r,获取传入对象的repr方法的重临值,并将其格式化到钦命地方

  • c,整数:将数字调换来其unicode对应的值,10进制范围为 0 <= i <= 1114111(py27则只帮忙0-255);字符:将字符增添到内定地点

  • o,将整数调换到 八 进制表示,并将其格式化到内定地方

  • x,将整数转变到十六进制表示,并将其格式化到内定位置

  • d,将整数、浮点数转变到 十 进制表示,并将其格式化到内定地点

  • e,将整数、浮点数转变来科学计数法,并将其格式化到钦点地方(小写e)

  • E,将整数、浮点数转变来科学计数法,并将其格式化到钦定地点(大写E)

  • f, 将整数、浮点数转变到浮点数表示,并将其格式化到钦命地点(暗许保留小数点后6位)

  • F,同上

  • g,自动调节将整数、浮点数调换到浮点型或科学计数法表示(抢先6位数用科学计数法),并将其格式化到钦赐地点(要是是不错计数则是e;)

  • G,自动调度将整数、浮点数转变来浮点型或科学计数法表示(超越6位数用科学计数法),并将其格式化到钦定位置(假若是道理当然是那样的计数则是E;)

  • %,当字符串中设有格式化标识时,必要用 %%象征叁个百分号

  1. format方式
2. format字符串格式化

a. format方法能够使用花括号作为占位符,传入的参数将替换花括号。

图片 51

image.png

b. format方法的参数可感觉四个,如若不在括号里钦赐其地方一一对应引入。

图片 52

image.png

c. format方法能够在花括号里填入位置数字,其后的参数根据职位引进,从0号地点上马

图片 53

image.png

同贰个地方的参数可以引进多次。

图片 54

image.png

d. format方法能够用字符作为占位符的标记,方便识别。

图片 55

image.png

e. format方法的占位符能够混用,不过地方参数必需放在最前。

图片 56

image.png

format的一对范围:

  1. 占位符的个数大于参数个数的时候,会抛出万分IndexError。

  2. 占位符的个数小于参数个数的时候,若对应的占位符能相称到值则不报错,相称不到值会重临非凡。

  3. 当占位符出现混用的气象时,地点参数不在最前会回去万分。

ps:

  1. 习认为常接纳2.6或之后的版本选用format方法,2.6事先使用printf style。

  2. 在format中,须要小心的是,在2.6版本中是无法省略大括号里面包车型大巴数字依然根本字。

a = '苦短'
b = 'Python'
print('人生{},我用{}'.format(a,b)) #当{}里面是空的时候,里面默认索引为0,1,2。。。其对应值按format后括号里的元素顺序依次填入;
print('人生{0},我用{1}'.format(a,b)) 
print('人生{1},我用{0}'.format(b,a))#利用{}索引时,按照{}中索引在format后找到对应索引值填入,其中format后的值索引依次为0,1,2.。。。
print('人生{n2},我用{n1}'.format(n1=b,n2=a))#{}里面可以指定对象名称,通过对象名称去format后面取对应值,可以是无序的。
# 可以这么理解{}中需要什么,直接从format后面对号入座,默认顺序是0,1,2.....,
  • 这边有坑:
li1=['I','like']
li2 = ['python','!']
#前面索引指取后面哪个元素,后面[]指元素哪个值
print('{0[0]} {0[1]} {1[0]}{1[1]}'.format(li1,li2))
  • 格式化输出
    1.字符串
#如果值本身不够指定宽度,默认右对齐
print('s'%'python') >>>    python  #左边4个空格,右边对齐
print('%-10s'%'python') >>>python    #右边4个空格,-表示左对齐
print('%-1s'%'python') >>>python    #遵循参数长度,即小于本身长度,显示本身;
  1. 整数
print('%d'%2) >>>'2' #可以int('%d'%2)来转化为int型
print( '%d'%2.6) >>>'2'   #格式化整数部分
  1. 小数
print('%f'%2.2)  >>>'2.200000'  #默认6位小数
print('%.3f'%2.2) >>>'2.200'    #小数点后面代表精度
print('.3f'%2.2) >>>'     2.200'         #小数点前面的数代表整个长度
print('0.3f'%2.2) >>>'000002.200'    #前面可以用0填充
print('%3.5f'%2.2) >>>'2.20000'  #冲突了(所给出的宽度小于给出的精度时)遵循后面的精度
  1. %o 格式化8进制
print('%o'%8) >>>'10'
print('%o'%7) >>>'7'
  1. %x 格式化16进制
print('%x') >>> '10'
print('%x'%9) >>>'9'
print('%x') >>>'a'
print('%x') >>>'b'
print('%x') >>>'f'
  1. %e 格式化科学计数法
 '%e'0   #'1.000000e 02'  相当于10的2次方
 '%e'%1.3   #'1.300000e 00'   相当于1.3的

7. 显得她的正负

'% d'%2  #‘ 2’
'% d'%-2  #'-2'   注意引号里面不要写-,因为这个代表左对齐
%d'%-2  #'-2'
  • 举例:
a=1.1,用3种格式,输出 a 的值: 字符串格式, 整型格式, (浮点型 带加号 靠右端)
'%s'%a >>>'1.1'
'%d'%a >>>'1' #格式化整数部分
'% 10.1f'%a>>>' 0000001.1' #值本身不够指定长度,默认右对齐,前面可以用0填充

重点

  • 浓度复制
    先是要明白python中的变量含义,对于python来讲,python的任何变量都以指标,变量的积攒的只是三个变量的值所在的内部存款和储蓄器地址,实际不是以此变量的只自身。类似指针,接纳了援用语义的点子

Python中指标的赋值都以拓宽对象援用(内部存款和储蓄器地址)传递
1)首先看个简易的例子:

图片 57

image.png

图片 58

image.png

地方,首先a初叶化得到1的内部存款和储蓄器地址,然后再复制给b,b也针对了1,当a重新初阶化后,指向了2,不过b不改变
2)看个复杂的,列表:

图片 59

image.png

图片 60

image.png

lis2指向同三个列表,而内部元素又针对各自内部存款和储蓄器,无论lis或lis2更改当中三个,则2个都变,因为他们针对同三个列表;

图片 61

image.png

采用copy.copy(),能够进行对象的浅拷贝,它复制了指标,但对此目的中的成分,依旧选择原本的引用.

图片 62

image.png

若是急需复制多个容器对象,以及它在那之中的装有因素(富含元素的子成分),能够选取copy.deepcopy()实行深拷贝

图片 63

image.png

浅复制 #复制第一层

深复制 #复制全部层

浓度复制 只设有于嵌套列表;

可参考:https://www.cnblogs.com/huamingao/p/5809936.html

在Python中不可变对象指:一旦创建就不可修改的对象,包涵字符串,元祖,数字

在Python中可变对象是指:可以修改的目的,富含:列表、字典

本文由星彩网app下载发布于计算机编程,转载请注明出处:python之核心数据类型点滴,字符串及其操作

TAG标签: 星彩网app下载
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。