gpt4 book ai didi

python - 编辑代码以根据条件创建过滤器,然后剥离条件

转载 作者:行者123 更新时间:2023-11-30 23:31:03 25 4
gpt4 key购买 nike

所以,

我正在寻找一些帮助来编写一些代码,以便它还包含一个 if 语句,以便仅当该行包含 (BIPL) 时才添加过滤器,然后将其从添加后的过滤器列表...

1test,tester,testing (BIPL),no,yes
2test,tester,testing,no,yes
3data,datas,datatest (BIPL),yes,no

当前代码...

with open('test.csv', 'rb') as old_csv:
filters = {(row[0].lower(), row[1][:3].upper(), row[2].upper()) for row in csv.reader(old_csv, delimiter=',')}

实际上结果如下,只是格式不同。

1test,TES,TESTING
3data,DAT,DATATEST

这应该是一个简单的更改,但我无法弄清楚

最佳答案

csv.reader 可以接受迭代器作为其第一个参数(不仅仅是文件句柄)。因此,您可以定义一个生成器,仅生成包含 '(BIPL)' 的行并将其发送到 csv.reader:

import csv
import re

def only_bipl(f):
for line in f:
if '(BIPL)' in line:
yield re.sub(r'\s*\(BIPL\)', '', line)

with open('test.csv', 'rb') as old_csv:
reader = csv.reader(only_bipl(old_csv), delimiter=',')
filters = {(row[0].lower(), row[1][:3].upper(), row[2].upper()) for row in reader}
<小时/>

请注意,上面的内容将生成任何位置包含 '(BIPL)'任何行。更好、更有针对性的替代方案是仅匹配第三项末尾包含 '(BIPL)' 的行。您可以在集合理解中使用 if-clause 来做到这一点:

with open('test.csv', 'rb') as old_csv:
reader = csv.reader(old_csv, delimiter=',')
filters = {(row[0].lower(), row[1][:3].upper(), row[2][:-6].strip().upper())
for row in reader
if row[2].endswith('(BIPL)')}

关于python - 编辑代码以根据条件创建过滤器,然后剥离条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20201875/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com