gpt4 book ai didi

Python 2.7 匹配 CSV 文件行中的精确字符串

转载 作者:行者123 更新时间:2023-11-28 18:21:48 25 4
gpt4 key购买 nike

我有一个 csv 文件,其中包含特定列中的字符串和其他列中的其他值。我还有一个字符串列表。在行上循环,我想检查列表中的一个字符串是否恰好包含在 csv 文件的行中。如果是,则必须将此行写入新的 csv 文件。

csv 文件是一个行列表,如下所示:

22/06/2017 04:00:32 | string1 | value1   
22/06/2017 04:00:32 | string11 | value2
22/06/2017 04:00:32 | string2 | value3
22/06/2017 04:00:32 | string3 | value4

我写了这段代码,它工作正常,但它没有考虑字符串的“精确”匹配。

import os, csv

def filter_csv(folderpath):

list1 = [
('name1',1,'string1','value1'),
('name2',2,'string2','value2'),
('name3',3,'string3','value3'),
('name4',4,'string4','value4'),
...
]

def column(matrix, i):
return [row[i] for row in matrix]

col = column(list1,2)

for file in os.listdir("%s" % folderpath):
if file.endswith(".csv"):
new_file = 'new_'+file
filepath = os.path.join("%s" % folderpath, file)
new_filepath = os.path.join("%s" % folderpath, new_file)

with open('%s' % filepath) as csvfile:
lines = csvfile.readlines()

with open('%s' % new_filepath, 'wb') as csvfile2:
for line in lines:
for namevar in col:
if namevar in line:
csvfile2.write(line)

return

如何为 csv 文件的列添加字符串的精确匹配?

最佳答案

您要做的是将过滤后的列表写入文件。

过滤条件是“一些预定义的有效值之一必须出现在 CSV 行上”,我们可以为此使用集合交集。我们需要一组有效值,当您将这些值与当前输入行相交并保留一些值时,当前输入行将通过。

import os, csv
from glob import glob

def filter_csv(folderpath):

list1 = [
('name1',1,'string1','value1'),
('name2',2,'string2','value2'),
('name3',3,'string3','value3'),
('name4',4,'string4','value4'),
# ...
]

# prepare a set of valid values
valid_values = {row[2] for row in list1}

for filepath in glob("%s/*.csv" % folderpath):
filename = os.path.basename(filepath)
new_filepath = os.path.join(folderpath, 'new_' + filename)

with open(filepath, newline='') as infile, \
open(new_filepath, 'wb') as outfile:

reader = csv.reader(infile)
writer = csv.writer(outfile)
filtered_rows = (row for row in reader if valid_values.intersection(row))

writer.writerows(filtered_rows)

注释

  • glob() 对于按扩展名查找文件非常有用
  • with 可以处理多个资源
  • 你可以使用\来跨越多行
  • 集合针对查找匹配值进行了优化
  • { ... } 是一个集合理解 - 它将一个列表变成一个集合
  • 始终使用 CSV 模块解析 CSV 文件——永远不要使用 .split() 或类似的东西

关于Python 2.7 匹配 CSV 文件行中的精确字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44702019/

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