同一个列表中,存在着许多重复项,可以用EXCEL的公式提取其不重复项,也可以用Python来做这件事。
如下代码用以实现以上功能。
比较特殊的,代码中有一段关键性的“列表推导式”,结构比较复杂,我特地让GhatGPT帮我解释了一下,以便写入注释中。没想到它居然解释得非常清楚。这段解释经我些许修改后,特地保留在代码中展示给大家看——AI真的越来厉害了!
'''提取列表中的不重复项'''
# 导入日志模块
import logging
#关闭logging,比这个级别小的log全部都关闭掉
# logging.disable(logging.CRITICAL)
#定义log的基本配置
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s-%(levelname)s:%(message)s')
#切换工作目录
工作目录='G:\Xct\python\劳务工资回单'
import os
原工作目录 = os.getcwd()
logging.debug(f'原工作目录:%s' % (原工作目录))
#预存储工作目录
os.chdir(工作目录)
现工作目录 = os.getcwd()
logging.debug(f'现工作目录:%s' % (现工作目录))
#打开单列文本文件读行成表并转为子列表
import os
名单列表=[]
单列文本文件 = '三项目各月备案人员汇总.txt'
#如上文本文件必须只有单列(一般是姓名或身份证或ID号)无重复项
#记得将其另存为utf-8
with open(单列文本文件, 'r', encoding='utf-8-sig') as 文件:
行列表 = 文件.readlines()
for 名单 in 行列表:
名单去空格=名单.strip()
#将"行列表"的元素转为子列表,同时去除子列表元素首尾的
# 制表符\t、回车符\r、换行符\n
名单列表.append(名单去空格)
#创建目标母列表
print(名单列表)
#提取列表中的不重复项
原始列表=名单列表[:]
不重复元素列表 = [当前元素 for 当前索引号, 当前元素 in enumerate(原始列表) if 当前元素 not in 原始列表[:当前索引号]]
'''以下是GhatGPT的解释:
这段 Python 代码使用了列表推导式来创建一个新的“不重复元素列表”,
其中包含了“原始列表”中的所有不重复的元素。
具体来说,
这段代码首先使用了enumerate()函数来遍历“原始列表”,
同时获取每个元素的索引号和值。
然后,在列表推导式中使用了条件语句
'if 当前元素 not in 原始列表[:当前索引号]',
该语句判断“当前元素”是否出现在“当前索引号”之前的所有元素中。
如果“当前元素”在之前的元素中没有出现过,那么它就是一个
不重复的元素,会被添加到"不重复元素列表" 中。
最终,这段代码会返回一个包含了“原始列表”中所有不重复元素
的"不重复元素列表" 。
'''
名单列表=不重复元素列表
#输出到文本文件
import os
import sys
写入文件路径 = '临时转存列表.txt'
with open(写入文件路径, 'w', encoding='utf-8-sig') as 文件:
sys.stdout = 文件
for 变量 in 名单列表:
print(变量)
#打开该文本文件,删除所有不必要的符号
最终结果文件 = '输出列表.txt'
要删除的符号 = ["[", "]", ",", "'"]
with open(写入文件路径, 'a+', encoding='utf-8-sig') as 文件:
sys.stdout = 文件
with open(最终结果文件, 'w', encoding='utf-8-sig') as 结果:
sys.stdout = 结果
文件.seek(0)
内容 = 文件.read()
for 标点 in 要删除的符号:
内容 = 内容.replace(标点, '')
print(内容)
# 删除临时文件
os.remove(写入文件路径)
# 打开目录
os.startfile(工作目录)
# 用操作系统默认程序打开上述文件
os.startfile(最终结果文件)
#代码末尾恢复工作目录
os.chdir(原工作目录)
现工作目录 = os.getcwd()
logging.debug(f'恢复原工作目录:%s' % (现工作目录))