文章目录
一.for循环删除列表元素
1.删除list元素方法
-
pop方法:是删除第一个或者是指定删除元素的下标。返回被删除的值。
list.pop(i)
-
remove方法:直接指定要删除的元素值,删除首个匹配的值。
list.remove(item)
list2=[1,2,3,4,5,6,7,5] list2.remove(5) print(list2)
-
结果:
[1, 2, 3, 4, 6, 7, 5]
- del 元素方法
-
可以删除指定下标的元素,删除指定下标范围内的多个元素,删除整个对象
list2=[1,2,3,4,5,6,7,5] del list2[1] print(list2) #[1, 3, 4, 5, 6, 7, 5] list2=[1,2,3,4,5,6,7,5] del list2[2:4] #删除3,4 print(list2) #[1, 2, 5, 6, 7, 5] list2=[1,2,3,4,5,6,7,5] del list2 print(list2) #NameError: name 'list2' is not defined
2.直接删除往往结果与期望不一致
python 使用for循环删除列表元素,容易出现结果与期望不一致问题。
- 例如代码:要删除列表中的3或者4,但是最后结果是4未删除掉。
list = [1, 2, 3, 4, 5]
print(list)
for ele in list:
if ele == 3 or ele == 4:
list.remove(ele)
else:
print(ele)
print(list)
结果:
[1, 2, 3, 4, 5]
1
2
5
[1, 2, 4, 5]
- 因为删除3后,3之后的[4,5]前移,4占了3原来的位置。下次循环是取3之后的数,即现在4之后的数(因为4去3的位置顶替了),也就是继续去判断5了。
3.循环删除元素的正确方法:
方法1:while循环+i减
- 使用while循环时刻监测数组长度,控制数组索引i,当i 遇到删除元素时候就往回移动一个元素位置,即减1
list=[1,2, 3, 4, 5]
i=0
#不能使用for i in range(0,len(num_list))会导致最后index溢出
while i < len(list):
if list[i] == 3 or list[i]==4:
list.pop(i)
i-=1
else:
print("num_list[{}]={}".format(i,list[i]))
i+=1
print(list)
结果:
num_list[0]=1
num_list[1]=2
num_list[2]=5
[1, 2, 5]
- 注意:while循环不可以换成for,for i in range(0,len(num_list))会导致最后索引i溢出
方法2:使用copy
- 切片是生成数组的copy方式之一
list = [1, 2, 3, 4, 5]
# num_list[:]是对num_list的拷贝
for item in list[:]:
if item == 3 or item==4:
list.remove(item)
else:
print(item)
print(list)
结果:
1
2
5
[1, 2, 5]
方法3:倒叙遍历
倒叙遍历,删除某个元素后,后面元素向前顶替位置,后面的元素是已经check过的,所以不会导致元素遗漏问题。
list = [1, 2, 3, 4, 5]
for i in range(len(list)-1, -1, -1):
if list[i] == 3 or list[i] == 4:
list.pop(i)
else:
print("num_list[{}]={}".format(i,list[i]))
print(list)
结果:
num_list[4]=5
num_list[1]=2
num_list[0]=1
[1, 2, 5]
二.字符串处理库
三.字典—dict运用
-
setdefault() 函数 —有key获取值、没key设置 key:default
dict.setdefault(key, default=None)
-
如果 key 在 字典中,返回对应的值。
-
如果 key 不在字典中,则插入 key 及设置的默认值 default,并返回 default ,default 默认值为 None。
-
-
get()函数—有key获取值、没key返回default:
dict.get(key, default=None)
- 返回指定键的值,如果值不在字典中返回默认值 None。
而dict[key] 这种查询方法不要用,查询不到会报错
- 返回指定键的值,如果值不在字典中返回默认值 None。
四.csv操作
读取CSV文件,打开文件并创建一个csv.reader对象来读取文件的内容
import csv
with open(r'C:\Users\87772\Desktop\asr_text_20240223.csv', 'r') as file:
# 创建CSV读取器
reader = csv.reader(file)
# 遍历每一行
for row in reader:
print(row)
写入CSV文件,需要创建一个csv.writer对象,并将要写入的数据传递给它。
import csv
data = [
['Name', 'Age', 'Country'],
['John', 25, 'USA'],
['Alice', 30, 'Canada'],
['Bob', 35, 'UK']
]
#指定了参数newline='',以防止在写入文件时出现空行
with open(r'C:\Users\87772\Desktop\asr_text_20240223.csv', 'w', newline='') as file:
writer = csv.writer(file)
writer.writerows(data)
- 在Python 2中,open函数并不支持
newline参数
五.excel操作
1.读excel——xlrd
示例1:Python读取Excel文件特定数据
示例2:Python读取Excel文件所有数据
2.写excel——xlwt
xlwt模块只能写xls文件
,不能写xlsx文件(写xlsx程序不会报错,但最后文件无法直接打开,会报错)。
示例:新建excel文件并写入数据
3.使用 openpyxl 来处理
openpyxl模块可实现对excel文件的读、写和修改,只能处理xlsx文件
,不能处理xls文件。
4.使用Pandas库来处理excel数据
Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据。
写excel
修改excel–以修改原Excel文件中gender列数据为例,把girl修改为female,boy修改为male:
示例1:读取excel数据
示例2:操作Excel中的行列
六.mysql操作
【Python】从入门到上头—mysql数据库操作模块mysql-connector和PyMySQL应用场景 (15)
七.http请求操作
【Python】从入门到上头—网络请求模块urlib和reuests的应用场景(12)
八.判断不同操作系统类型
- 使用os.name
- os.name字符串会给出你正在使用的操作系统名称的泛化描述。但它并不直接给出操作系统的名称(如"Windows"、“Linux"或"macOS”),而是给出了一些较为通用的标识符,如’posix’(表示类Unix系统,包括Linux和macOS)或’nt’(表示Windows)。
import os
if os.name == 'nt':
print("Windows系统")
elif os.name == 'posix':
print("类Unix系统(如Linux或macOS)")
else:
print("未知系统")
- 使用sys.platform
sys.platform属性给出了更具体的系统信息,可以直接用来判断Windows、Linux或macOS。
import sys
if sys.platform.startswith('win'):
print("Windows系统")
elif sys.platform == "linux" or sys.platform == "linux2":
print("Linux系统")
elif sys.platform == "darwin":
print("macOS系统")
else:
print("未知系统")
九.获取指定目录下的所有文件名
def readFilesName(self, file_folder):
arr = []
# 读取所有文件
for file_name in os.listdir(file_folder):
arr.append(file_name)
return arr
十.判断文件是否存在
if not os.path.exists(directory_name):
os.makedirs(directory_name)
print(f'Directory "{directory_name}" created successfully.')
十一.在Python中打开一个桌面程序(或任何外部程序)
1.subprocess模块通常是Python中打开桌面程序的首选方法
在Python中打开一个桌面程序(或任何外部程序),你可以使用subprocess模块
。这个模块允许你启动新的应用程序和进程,连接到它们的输入/输出/错误管道,并获取它们的返回码。
- 以下是一个使用subprocess.run()函数来打开桌面程序(例如记事本Notepad)的例子:
import subprocess
# 调用系统的'notepad'命令来打开记事本
# 注意:这里的'notepad'是Windows的命令,如果你在Linux或Mac上,你需要使用相应的命令(如'gedit'或'open -a TextEdit')
subprocess.run(['notepad'])
# 如果你需要打开特定的文件,可以传递文件路径作为参数
# 例如,打开C盘根目录下的example.txt文件
subprocess.run(['notepad', 'C:\\example.txt'])
# 对于Mac和Linux,打开TextEdit和gedit的示例(请根据你的实际环境调整路径)
# 对于Mac
subprocess.run(['open', '-a', 'TextEdit', '/path/to/your/file.txt'])
# 对于Linux(使用gedit为例)
subprocess.run(['gedit', '/path/to/your/file.txt'])
# 可以通过在终端中使用 open 命令并指定 -a 选项后跟应用程序的 bundle identifier 或直接通过应用程序的名称(如果它位于你的 /Applications 文件夹中,且已添加到你的 PATH 变量中,但这对于大多数应用程序来说并不常见)来打开。
# 使用 open 命令和谷歌浏览器的应用程序名称
subprocess.run(['open', '-a', 'Google Chrome'])
# 如果你想要打开一个新的浏览器窗口(或标签页)并导航到特定的URL,
# 你可以将URL作为 open 命令的最后一个参数
subprocess.run(['open', '-a', 'Google Chrome', 'https://www.example.com'])
- subprocess.run()函数是
Python 3.5
及更高版本中引入的。如果你使用的是较旧的Python版本,可能需要使用subprocess.Popen()
,它提供了更多的灵活性和控制,但使用起来也更复杂一些。 - subprocess.run()函数返回一个
CompletedProcess实例
,它包含了进程的返回码和其他信息。但如果你只是需要简单地启动一个程序,通常不需要关心这些返回值。
2. 使用os.system()(不推荐)
在较旧的Python代码或一些简单脚本中,你可能会看到使用os.system()函数来执行系统命令以打开桌面程序。然而,这种方法通常不推荐用于生产环境,因为它不如subprocess模块灵活和安全。
import os
# 使用os.system()打开记事本(Windows)
os.system("notepad")
# 注意:这种方法会将命令的输出直接打印到Python脚本的输出中,
# 并且它不如subprocess模块那样易于控制和管理。
3.使用webbrowser模块(适用于打开网页或特定类型的文件)
import webbrowser
# 尝试使用默认程序打开文件(如果文件与某个桌面程序关联)
webbrowser.open('C:\\path\\to\\your\\file.txt')
# 注意:这不会直接打开桌面应用程序,而是尝试打开与文件类型相关联的程序。
- webbrowser.open()函数的行为(是在新标签页还是新窗口中打开URL)可能会因用户的浏览器设置和偏好而有所不同。
- webbrowser.open_new()函数通常会在新的浏览器窗口中打开URL,但这也可能受到浏览器设置的影响。
- webbrowser.open_new_tab()函数旨在在新的浏览器选项卡中打开URL,但并非所有浏览器都支持这一行为。在某些情况下,它可能会退回到webbrowser.open_new()的行为。
遍历字典(Dictionary)
在Python中,遍历字典(Dictionary)可以通过几种不同的方式来实现,具体取决于你想要访问字典的键(keys)、值(values)还是键值对(items)。以下是一些常用的遍历字典的方法:
1. 遍历字典的键(Keys)
你可以使用dict.keys()方法获取字典中所有的键,并使用一个循环来遍历它们。
my_dict = {'a': 1, 'b': 2, 'c': 3}
for key in my_dict.keys():
print(key)
# 或者更简洁地
for key in my_dict:
print(key)
2. 遍历字典的值(Values)
类似地,使用dict.values()
方法可以获得字典中所有的值,并通过循环遍历它们。
my_dict = {'a': 1, 'b': 2, 'c': 3}
for value in my_dict.values():
print(value)
3. 遍历字典的键值对(Items)
如果你需要同时访问字典的键和值,可以使用dict.items()方法,它会返回一个包含所有(键,值)对的视图对象,你可以遍历这个对象来访问每个键值对。
my_dict = {'a': 1, 'b': 2, 'c': 3}
for key, value in my_dict.items():
print(key, value)
4. 遍历字典时保持顺序(Python 3.7+)
在Python 3.7及以后的版本中,字典是按照插入顺序进行排序的,这意味着当你遍历字典时,元素会按照它们被添加到字典中的顺序出现。这在之前的Python版本中不是总能保证的。
my_dict = {'b': 2, 'a': 1, 'c': 3}
for key, value in my_dict.items():
print(key, value) # 输出将按照 'b', 'a', 'c' 的顺序
注意事项
- 在Python中,字典的迭代顺序在·Python 3.7及以后的版本中是有序的·,但如果你使用的是·Python 3.6或更早的版本,则不应依赖此行为。·
- 使用 dict.keys(), dict.values(), 和 dict.items()返回的都是视图对象(view objects), 它们反映字典的当前状态,但并不构成字典的副本。因此,这些视图对象支持迭代和成员测试,但不支持索引和切片操作。