文章目录
- os.mkdir()和os.makedirs()
- os.path.split()和os.path.splitext()
- os.path.join()合并两个路径或合并文件名和目录
- sort与sorted的区别
- 列表转字符串
- python中的三目表达式
- 一个列表常犯的错误
- startswith() and endswith()
- python3升级pip
- if not 和if is not None
- eval函数
- Python自带json转换工具
os.mkdir()和os.makedirs()
os.mkdir() #只能创建单级目录,如果创建多级目录,会出现找不到path的问题
os.makedirs() #能创建多级目录
- 代码演示
'''假设当前目录只有'/home/ly/Desktop/test/'是存在的'''
import os
path1 = '/home/ly/Desktop/test/dir1'
path2 = '/home/ly/Desktop/test/dir1/sub'
os.mkdir(path1) #不报错
os.makedirs(path2) #不报错
os.mkdir(path2) #报错,无法递归创建多个目录
os.makedirs(path1) #不报错
os.path.split()和os.path.splitext()
- 结果返回的都是一个元组
import os
path = '/home/none/Desktop/file.txt'
print(os.path.split(path)) #分割文件目录和文件名
print(os.path.splitext(path)) #分割文件路径和后缀
执行结果:
('/home/none/Desktop', 'file.txt')
('/home/none/Desktop/file', '.txt')
os.path.join()合并两个路径或合并文件名和目录
import os
path = '/home/none/Desktop'
path1 = '/home/none/'
print(os.path.join(path,'file.txt'))
print(os.path.join(path,'/home/none/Desktop/file/path/'))
print(os.path.join(path1,'file.py'))
print(os.path.join(path1,'/home/none/test/file.py'))
执行结果:
/home/none/Desktop/file.txt
/home/none/Desktop/file/path/
/home/none/file.py
/home/none/test/file.py
sort与sorted的区别
-
sorted
返回一个新的排序后的列表,原列表的顺序并未发生改变
test = [1,8,9,2]
a=sorted(test)
print(a)
print(test)
执行结果:
[1, 2, 8, 9]
[1, 8, 9, 2]
-
sort
直接对原列表进行排序,返回的是None
,也就是没有返回值
test = [1,8,9,2]
a = test.sort()
print(a)
print(test)
执行结果:
None
[1, 2, 8, 9]
列表转字符串
data = [-0.79, 598.11, 0.69, -122.44, 0.19, 141.44]
print(data)
str_data = ','.join(str(i) for i in data)
print(str_data)
执行结果:
[-0.79, 598.11, 0.69, -122.44, 0.19, 141.44]
-0.79,598.11,0.69,-122.44,0.19,141.44
python中的三目表达式
condition1 = True
condition2 = False
a = 'hello' if condition1 else 'world'
b = 'hello' if condition2 else 'world'
print(a+','+b)
执行结果:
hello,world
一个列表常犯的错误
每次想迭代列表并且删除原列表中指定的元素时,老是想到这样做,然后输出结果各种不对,按理说下面的程序最后输出应该是一个空列表,但结果却不符合预期,for
每次按顺序获取列表内容,第一个循环从0开始,第二个从1开始,第三个从2开始,依次类推,但是每次列表被删除一个元素后,元素就会往前移一步,比如第一次删除9,这个元素后,8就变成了元素列表的第0个元素,第二次循环的时候本来要删除列表第1个元素8的,结果8变成了第0个元素,7变成了第1个元素,导致8没被删除,而7被删除了,就会出现漏删的情况
test = [9,8,7,1,2,3,5,4,6,0]
for i in test:
test.remove(i)
print(test)
#输出
[8, 1, 3, 4, 0]
#排序后的程序
test = [9,8,7,1,2,3,5,4,6,0]
test.sort()
for i in test:
test.remove(i)
print(test)
#输出
[1, 3, 5, 7, 9]
startswith() and endswith()
>>> str = 'abcdefg'
>>> str.startswith('a')
True
>>> str.startswith('b')
False
>>> str.startswith('b',1)
True
>>> str.endswith('g')
True
>>> str.endswith('f')
False
>>> str.endswith('fg')
True
python3升级pip
sudo pip3 install --upgrade pip
if not 和if is not None
if not
用来判断一个bool
型的变量,这个变量可以是True
或者False
,也可以是其他变量,如果是非bool
类型的变量,python
将会进行转换,python
中的空字符串、空列表、空元组、空字典、0,None
等会转换为False
,其他非0或非空的变量将转换为True
,但是if is not None
不会进行转换,空就是空,非空就是非空,由下面这段代码可以看出空列表并不为空,只是列表的元素个数为0,所以在使用if x is not None
时满足条件,而用if
时不满足条件,因为x被转换成bool
类型,且为False
x=[]
if x:
print('x')
if x is not None:
print('not None')
if not x:
print('if not')
执行结果:
not None
if not
eval函数
eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果,也可以将字符串转换成列表/元组/字典。
ly@lanyou:~$ python3
Python 3.6.9 (default, Nov 7 2019, 10:44:02)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 1
>>> b = 2
>>> c = 'a + b'
>>> print(eval(c))
3
Python自带json转换工具
python解析json串工具会自动将转换结果进行对齐和格式化。
ly@lanyou:~$ echo '{"addr":{"province":"guangdong", "city":"guangzhou"}, "name":"xiaoming", "sex":"male"}' | python -m json.tool
{
"addr": {
"city": "guangzhou",
"province": "guangdong"
},
"name": "xiaoming",
"sex": "male"
}