常见问题:
文章目录
- IDE与
- 1.如何注释
- 2.python运行代码后没有输出,但无报错,有exit code 0标志
- 3.导入txt文件,但是出现错误:UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 205: illegal multibyte sequence
- 参数
- isinstance()
- 容器:特点、对元素提供的操作
- 字符串 str
- 列表 list
- 元组 tuple:
- 字典 dictionary:
- 文件
- 打开、只读、写入、关闭文件
- 文件拷贝
- 文件重命名
- 文件夹创建删除等
IDE与
IDE(Integrated Development environment)是集成开发环境,是用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具,继承了代码编写、分析、编译、调试等功能为一体
pycharm有MAc、windows、Linux三个版本
1.如何注释
- 单行注释:
代码块前后用#
#注释内容
I am #后接注释内容
- 多行注释
用3个’或者"
'''注释中的内容
'''"""注释中的内容"""
多行注释的快捷键
选择区域,Ctrl+/,
再次按快捷键,可以取消注释
MAC:CMD+/
2.python运行代码后没有输出,但无报错,有exit code 0标志
仅出现"Process finished with exit code 0"
有几种可能:
-
编写的代码本来就无输出,可以尝试用print或者其它代码试一试,确认不是原有代码的问题
-
之前创建project的时候,使用的是pycharm提供的虚拟解释器(New envionment using),而本应点击下方的Existing interpreter,并选定文件(精确到python.exe),下面提供了修改步骤:
File→Settings→Project→Python Interpreter→点击“齿轮”图标→Add
点击add后跳出另一界面:
点击Existing environment,将python.exe的路径添加至Interpreter,并勾选Make available to all projects
OK→Apply
*倘若忘记了python.exe的为值可使用 -
排查了以上两种情况后,仍然有误,可以尝试打开Run with console(网上有人说亲测有效,我没试过)
在Configuration→Execution→Run with console 处勾选→Apply
3.导入txt文件,但是出现错误:UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0x80 in position 205: illegal multibyte sequence
(1)可能是因为txt文件中使用的是其它类型的编码,需要再加入标记:
FILE_OBJECT= open('order.log','r', encoding='UTF-8')
FILE_OBJECT= open('order.log','rb')
或者
FILE_OBJECT= open('order.log',encoding='rgb')
(2)除此之外,若文件不在当前目录,需要输入绝对路径:如文件为D:\python_program\exp\panda.txt,输入为:D:/python_program/exp/panda.txt,因为涉及“\”涉及到转义字符
参数
- 调用参数时既有位置参数也有关键字参数,应该先保证位置参数全部在前
- 在给函数添加默认(缺省)参数时,并不会给所有的参数都设置默认值。*不过若某一个位置的形参设置了默认参数,那么该位置后的所有参数都必须设置默认参数
- 含全局变量,但函数内部又有同名变量,会优先就近调用
- 函数遵循单一职责原则
每次条用函数都会返回一个新的对象
isinstance()
判断对象是否为某种类型,返回Bool型值
isinstance(a,int);
Ture
容器:特点、对元素提供的操作
相关度高的数据一同存储在同期中,可以减少变量的定义
根据不同类型数据由不同类型容器存储。有的容器方便操作、查询效率高、有的元素可以保证元素唯一、有的元素可以保证数据只读等。
eg.学校
根据存储数据的特点,分为序列式容器和非序列式容器
- 序列式容器中的二元素在存放时都是连续存放的,包括字符串、列表、元祖
- 非序列式容器在存储元素时不时连续存放的,包括字典、集合
容器支持根据下标存取元素(索引):增、删、改、排序
字符串 str
不可修改
可索引
str1="123"
for n in str1: #一个个取元素赋给nprint(n,end=" ") #" "以空格结尾,输出不需要换行#或以下的这种,但是一般用for
i=0
while i<3print(str1[i]),end="")i+=1
replace函数:专属于字符串
replace并不会替换原本的字符串,而是替换之后新建一个字符串
eg.更换错别字
poetry="江南好,风景旧曾谙,日出江花红似火,春来江水绿如蓝,谁不忆江南?"
New=poetry.replace("谁","何")
New2=poetry.replace("谁","何",2) #也可以加上需要修改的个数,不加默认为1,修改字符串左边优先修改
print(poetry)
print(New)
列表 list
一个列表中的元素类型可以多样化,但一般建议一列表用同一组
指定位置插入和删除元素,会造成数据元素的一移动,效率较低。
列表按按元素的搜寻效率低,但是按照索引的效率高。
append函数:向列表内按顺序添加元素
list1=[]
list1.append(100)
list1.append(10)
print(list1)[100, 10]
insert函数:在某一位置(写入索引)插入函数
[100, 10]
list1.insert(0,500)
print(list1)[500,100, 10]
加列表加入与另一列表合并:
list1=[1,2,3]
lsit2=["aaa",5,""b]
list1.append(list2)[1,2,3,"aaa",5,""b]
pop函数:删除尾部元素,或指定位置元素
lsit1=[1,2,3]
lsit1.pop(0) #删除位置0的元素
print(lsit1)[2, 3]lsit1.pop() #删除位置0的元素
print(lsit1)
[1,2]
remove函数:按关键字移除列表内的值
如果有多个,默认左侧优先移除
list1=[100, 10, 20,200, 30, 20]
list1.remove(20)
print(list1)[100, 10, 200, 30, 20]
del函数:根据位置删除
list=[1,2,3]
a=0
del list[a]
print(list)list=[2,3]
clear函数:清楚列表中的所有内容
list1.clear()print(list1)
sort函数:升序(reverse=False;默认)或逆序(reverse=True)
import random
list1=[]
i=0
while i<10:ran=random.randint(1,50)list1.append(ran)i+=1
print(list1)list1.sort(reverse=True)
print(list1)list1.sort(reverse=False) #或者list1.sort( )
print(list1)[7, 4, 48, 8, 50, 45, 13, 48, 13, 1]
[1, 4, 7, 8, 13, 13, 45, 48, 48, 50]
reverse函数:将原有顺序逆序
list1=[34, 36, 35, 27, 35, 13, 45, 12, 20, 18]list1.reverse()
print(list1)[18, 20, 12, 45, 13, 35, 27, 35, 36, 34]
index函数:按照关键词查询其在列表中的位置
list1=[1,3,5]L=list1.index(1)
print(L)0 #输出的是索引 ,采用该方法可以修改对应位置的元素
元组 tuple:
- 元组和列表类似,但一旦创建不可修改
- 元组是序列式融通器,可以进行查询(索引/切片)(index)和遍历操作(for、while)
- 元组比列表更节省空间
my_tuple=(10,1)
print(my_tuple[0])10tuple=((e,a,2),) #元组中若只含有一个元素,则尾部需+,
print(tuple)
(('e', 'a', 2),)('e', 'a', 2) #否则输出的是为嵌套的元组或者单独的数值
字典 dictionary:
字典查找效率高,以空间换取时间
键(唯一)、值对应,满足哈希表
不支持索引
可以修改
可以在字典中嵌套字典
创建、修改元素:
mysq={"a":8,"b":90,101:"cat"} # 创建dictionary
print(mysq[101]) # 输入键得到值"cat"mysq["b"]="Bob" # 对键下的**值**进行修改,不存在则添加新元素
print(mysq)
{'a': 8, 'b': 'Bob', 101: 'cat'}mysq['Dog']='8'
{'a': 8, 'b': 'Bob', 101: 'cat','Dog','8'}
**del函数:**删除元素
del mysq['b'] #删除键-值对
print(mysq){'a': 8, 'b': 'Bob', 101: 'cat'}W=8
del W #可以直接某个变量
print(mysq)
{'b': 'Bob', 101: 'cat'}del person
**clear函数:**清空字典
mysq.clear()
遍历:
由于本身不能进行遍历,所以若要取出字典中所有的值,应该将其转成列表
输出键:
dic={'aaa':10,'bbb'"20,'ccc':30}
for v in dicprint(v)aaa
bbb
ccc #采用该方法仅输出键
也可以直接输出键:
my_list={'aaa':10,'bbb':20,'ccc':30}
key_list=my_list.keys()
print(key_list)dict_keys(['aaa', 'bbb', 'ccc'])
key_list=my_list.keys()
print(list(key_list)) #以列表形式输出['aaa', 'bbb', 'ccc']
输出值:
key_list=my_list.values()
print(list(key_list))[10, 20, 30]
**输出键值:**采用列表中嵌套元组
1. for
key_list=my_list.items()
print(list(key_list))[('aaa', 10), ('bbb', 20), ('ccc', 30)]for key in list(key_list):print(key)('aaa', 10)
('bbb', 20)
('ccc', 30)
2. while
aa=my_list.items()
b=list(aa)
i=0
while i<len(b):print(b[i])i+=1('aaa', 10)
('bbb', 20)
('ccc', 30)#如果需要分开写键值,可以考虑这样写:
while i<len(b):print("key键",b[i][0],"value值",b[i][1])i+=1
文件
数据的接收和发送需要依赖于计算机操作系统控制硬件设备来完成。内部实现机制很复杂,但python将这些复杂的步骤封装起来,给了我们一种极其简单的实现方式,通过调用 print 和 input 函数来完成。
- 从键盘读取数据到程序中,并且从程序中将数据显示到屏幕,叫做标准输入和输出
- 丛文件读物数据到程序中,并且从程序中将数据存储到文件,叫做文件输入和输出
- 从网络读取数据到程序中,并且从哦程序中将数据发送哦到网络,叫做网络输入和输出
文件打开分为读、写、追加模式,这三种模式分别再分为文本模式和二进制模式
打开文件用的文本模式,会进行换行符的转换,打开文件用的是二进制模式的话,不会进行换行符转换。文件本质上都是以二进制的方法存储在磁盘上。
访问模式 | 说明 |
---|---|
r | 以制度方式打开文件。文件的指针将会放在文件的开头,为默认模式 |
w | 打开一个文件只用于写入。若果改文件已存在则将其覆盖。如果改文件不存在,创建新的文件。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的额内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入 |
rb | 以二进制格式打开一个文件用于制度。文件指针将会放在文件的开头。这是默认模式 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件 |
ab | 以二进制格式打喀一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有的内容之后。如果该文件不存在,创建新文件进行写入 |
打开、只读、写入、关闭文件
**open函数:**若文件不存在,则会新建文件
**close函数:**每次用完文件后必关闭
**read函数:**读文件
write函数:
fa=open('a.txt','w')
Q=fa.read() #未制定参数,则读取参数指定个数的数据
print(Q)Q=fa.read(3) #指定参数,则读取指定个数(3个)参数
my_content="hello world!第二次写入文件"
fa.write(my_content)
fa.close()
**readlines函数:**一次读取所有行,输出为列表模式
"""
文档中内容:
aaa
123c
flgkc
"""
f=open('a.txt','r')
content=f.readlines()
print(content)
f.close['aaa\n','123c\n','flgkc\n'] #输出为列表模式,且换行符有标识'''或者采用',并可去\n'''
line=f.readlines()
for i in line:if line[-1]=='\n'print(line[:-1])else:
print(i)f.close
f.close()
**readline函数:**一次读取一行
"""
文档中内容:
aaa
123c
flgkc
"""f=open(’a.txt‘,'r')
A=f.readline()
print(A)
B=f.readline()
f.close()
print(A)aaa #第一次调用默认第一行
123c #第二次调用跳到下一行
**writelines函数:**一次写多行
f=open('a.txt','w')f.writelines(['aaa\n','bbb\n','ccc\n'])
f.close()
文件拷贝
1.获得需要拷贝的文件名
old_file_name=input('请输入:')
new_file_name=old_file_name+".bk"
- 打开新文件
f_old=open(old_file_name,'rb')
f_new=open(new_file_name,"wb")
- 读取要拷贝文件内容
- 将老文件内容写到新文件里
old_file_content=f_old.read()
f_new.write(old_file_content)
- 关闭新老文件
f_old.close()
f_new.close()
文件重命名
os模块拥有文件相关的指令
import os
os.reneme("hello.txt","aabbcc.txt")
若进行批量修改:
eg.?
remove函数:删除文件
只写 文件名,默认在当前路径
写绝对路径,删除所有
os.remove("abc.txt")
文件夹创建删除等
与linux有些类似:
mkdir、rmdir函数:创建、删除文件夹
os.mkdir("/Users/edwardmeng/Desktop/haha") #创建文件夹haha
os.rmdir("/Users/edwardmeng/Desktop/haha") #删除
listdir函数:获得指定目录下的文件类表
getcwd函数:获取当前文件夹位置
content=os.listdir() #“()”默认当前文件夹
print(content) c=os.getcwd() #获得当前文件夹位置
chdir函数:切换目录
os.chdir("/Users/edwardmeng/Desktop/") #切换到某绝对路径,再进行下列的操作