我是Python的新手,只是在努力工作,因为我团队中的另一个人离开了,需要在线上工作,所以如果这是一个愚蠢的问题,请道歉。
我需要从列表中删除项目(它们将包含某个短语)并使用Google搜索并尝试了一些方法,但它似乎无法正常工作。
我目前得到的是,
def get_and_count_card_files(date):
# Retrieve the DC and SD card files
dc_files = dc_card_files.get_dc_files(dc_start_location, date)
sd_files = sd_card_files.get_sd_files(sd_start_location)
print(dc_files)
if '*NoCover*' in dc_files:
dc_files.remove('*NoCover*')
Dc_files是列表(文件名串),我需要删除文件名中包含NoCover的任何内容。它确实存在,因为打印功能告诉我它。
任何人都知道我做错了什么
答案 0 :(得分:6)
使用这段代码,*
不会在这些上下文中执行glob或正则表达式:
if '*NoCover*' in dc_files:
dc_files.remove('*NoCover*')
所以最好说:
if 'NoCover' in dc_files:
但是,我们必须在列表中找到要删除的正确条目,而不使用通配符。
对于一个小列表,您可以迭代它。列表理解会做:
new_dc_files = [dc for dc in dc_files if 'NoCover' not in dc]
这是一种紧凑的说法:
new_dc_files = list()
for dc in dc_files:
if 'NoCover' in dc:
continue
new_dc_files.append(dc)
答案 1 :(得分:0)
if '*NoCover*' in dc_files:
会在列表dc_files中查找与“ NoCover ”明确匹配的元素。
你能做什么,是
# Iterate over the list backwards, this will stop you from skipping elements
# you want to check in the next iteration if you remove something
for index, dc_file in enumerate(dc_files[::-1]):
if 'NoCover' in dc_file:
dc_files.pop(index)
或者,如果您有更复杂的模式匹配要求,可以查看使用正则表达式。
答案 2 :(得分:0)
您可以使用Python列表推导来过滤掉不需要的条目:
def get_and_count_card_files(date):
# Retrieve the DC and SD card files
dc_files = dc_card_files.get_dc_files(dc_start_location, date)
sd_files = sd_card_files.get_sd_files(sd_start_location)
print(dc_files)
dc_files = [file for file in dc_files if 'NoCover' not in file]