Python语法知识点

标签: Python 分类: 未分类 创建时间:2019-08-21 09:11:41 更新时间:2025-01-17 10:39:22

1.can’t multiply sequence by non-int of type ‘float’

2.UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xb3 in position 2: incomplete multibyte sequence

在使用python处理坐标的时候,需要将字符串根据度分秒中的秒先分割,然后在处理,在使用split函数的时候,我遇到了这个错误。字符串坐标如下

1
1.28°12′09.090″121°09′16.756″ 2.28°12′26.701″121°09′41.847″ 3.28°12′33.649″121°09′35.792″ 4.28°12′20.931″121°09′18.179″ 5.28°12′28.951″121°09′07.653″ 6.28°12′45.098″121°09′06.679″ 7.28°12′44.782″121°08′56.026″ 8.28°12′27.097″121°08′56.605″

其中的度分秒都是中文字符串,这个使用用split分割函数,对数据进行分割,会出现:“UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xb3 in position 2: incomplete multibyte sequence”错误。

这个时候,要将字符串先进行utf8编码,然后在进行调用split函数,就可以了。

完整代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import openpyxl as excel

## 读取excel,获取站点关联线段
excelFile=r"D:\zlc\test.xlsx"
wb=excel.load_workbook(excelFile)
## 读取第一行,获取列头
sheet=wb["Sheet1"]
rows=sheet.max_row
columns=sheet.max_column
array=[]

test="kkj就立即立即"
for kl in test.split("立"):
print kl

for i in range(1,rows-1):
temp=sheet.cell(row=i,column=1).value
## 分割
# temp=temp.encode("utf-8")
# print temp
# sp="″".encode("utf-8")
coordinates=temp.encode('utf-8').split("″")
# for c in coordinates:
# print c
print coordinates
print len(coordinates)
# for j in range(len(coordinates)-2):
# print j
# te=coordinates[j]
# print coordinates.get
# if temp not None:
# print temp
# print coordinates
# array.append(temp)

主要是encode函数。

3.判断对象是否为空

1
2
3
4
5
if x is None:

if not x:

if not x is None:

4.遍历字典

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
## 遍历key
for key in d:
print key

for key in d.iterkeys():
# d.iterkeys(): an iterator over the keys of d
print key

for key in d.keys():
# d.keys() -> ['y', 'x', 'z']
print key

## 遍历values
for value in d.itervalues():
# d.itervalues: an iterator over the values of d
print value

for value in d.values():
# d.values() -> [2, 1, 3]
print value

## 遍历keys和values
for key, value in d.iteritems():
# d.iteritems: an iterator over the (key, value) items
print key,'corresponds to',d[key]

for key, value in d.items():
# d.items(): list of d's (key, value) pairs, as 2-tuples
# [('y', 2), ('x', 1), ('z', 3)]
print key,'corresponds to',value

参考文章:
1.Python: 遍历字典

5.int和string相互转换

1
2
3
4
5
6
7
8
9
10
11
## 10进制string转化为int 
int('12')

## 16进制string转化为int
int('12', 16)

## int转化为10进制string
str(18)

## int转化为16进制string
hex(18)

6.用户输入

使用while True,循环等待用户输入,当用户输入 确定按键的时候,退出循环。

1
2
3
4
5
6
7
8
## 进行验证
def validate():
print("天王")
while True:
if input('输入回车键退出程序') == '':
sys.exit()
else:
break

7.路径拼接

这里有一个坑,就是第二个参数不能带斜杠,否则就会忽略第一个参数

1
2
3
4
# 无效
path = os.path.join(app_path, '/data/', now_date + '/')
# 有效
path = os.path.join(app_path, 'data/', now_date + '/')
参考文章:
【1】.python os.path.join()拼接不成功,有个坑 使用os.path.join第二个参数的首个字符如果是”/“ , 拼接出来的路径会不包含第一个参数
【2】.使用os.path.join无效/不起作用的原因 os.path.join(a,b)在以下情况下会起不到连接作用,并返回b:a,b中存在一个为绝对路径,即不是patha/pathb的形式,而是/patha/pathb的形式
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。