【Python】记录生产编程小tips(字符串处理、列表删除、字典、csv、excel操作)持续更新

一.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] 这种查询方法不要用,查询不到会报错

四.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)

八.判断不同操作系统类型

  1. 使用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("未知系统")
  1. 使用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), 它们反映字典的当前状态,但并不构成字典的副本。因此,这些视图对象支持迭代和成员测试,但不支持索引和切片操作。
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墩墩分墩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值