在python中按字符串过滤字典值



假设我有一个csv文件,如下所示:

animal; breed; Owner; furcolor; name
dog; poodle; Steve; black; Olga 1
dog; poodle; Steve; black; Olga 2
dog; poodle; Steve; ; Olga 3
dog; poodle; Steve; brown; Paul 1
dog; poodle; Steve; ; Paul 2
dog; poodle; Steve; brown; Paul 3
dog; poodle; Steve; ; Paul 4
dog; poodle; Steve; brown; Paul 5

现在,我想过滤所有在furcolor列中没有值的条目。因此,我应该得到以下两个条目:

  • 狗;贵宾犬;Steve;奥尔加3
  • 狗;贵宾犬;Steve;Paul 2
  • 狗;贵宾犬;Steve;保罗4

由于所有名为Paul[n]的狗都有值"brown",所有名为Olga[n]的犬都有指定的皮毛颜色,我希望我的程序将我的两个过滤条目的所有者名称条目(在本例中为Paul或Olga(字符串的开头与输入文件的所有现有条目进行比较,并为我的过滤条目分配正确的值。因此,我应该得到这个:

  • 狗;贵宾犬;Steve;黑色奥尔加3
  • 狗;贵宾犬;Steve;棕色的Paul 2
  • 狗;贵宾犬;Steve;棕色的保罗4

在最后一步中,我想将那些完成的条目添加到另一个csv文件中。

我目前的方法看起来是这样的,但到目前为止我只得到了这些:

import csv
with open(file.csv, 'r') as csvfile:
reader = csv.DictReader(csvfile, delimiter=';')
for row in reader:
if row['furcolor'] == '':

有办法做到这一点吗?我很感激能得到的每一个帮助。

当然有。希望这有帮助,我试着在评论方面保持自由。

import io, csv, sys
# Inlined data for ease of reproduction. Could be a file handle.
csvfile = io.StringIO(
"""
animal;breed;Owner;furcolor;name
dog;poodle;Steve;black;Olga 1
dog;poodle;Steve;black;Olga 2
dog;poodle;Steve;;Olga 3
dog;poodle;Steve;brown;Paul 1
dog;poodle;Steve;;Paul 2
dog;poodle;Steve;brown;Paul 3
dog;poodle;Steve;;Paul 4
dog;poodle;Steve;brown;Paul 5
""".strip()
)
# Read in all entries.
entries = list(csv.DictReader(csvfile, delimiter=";"))
# Compute a dictionary mapping the first word of the "name" to a fur color
# for each row that has a fur color.
name_to_color = {
row["name"].split()[0]: row["furcolor"]
for row in entries
if row["furcolor"]
}
# Loop over all entries; fix up those with no fur color.
for row in entries:
if not row["furcolor"]:
name_prefix = row["name"].split()[0]
# This line will crash if there is no matching fur color, and that's ok.
row["furcolor"] = name_to_color[name_prefix]
# Write the entries back out (to stdout, but could be any other stream).
writer = csv.DictWriter(
sys.stdout, ["animal", "breed", "Owner", "furcolor", "name"]
)
writer.writeheader()
writer.writerows(entries)

输出为

animal,breed,Owner,furcolor,name
dog,poodle,Steve,black,Olga 1
dog,poodle,Steve,black,Olga 2
dog,poodle,Steve,black,Olga 3
dog,poodle,Steve,brown,Paul 1
dog,poodle,Steve,brown,Paul 2
dog,poodle,Steve,brown,Paul 3
dog,poodle,Steve,brown,Paul 4
dog,poodle,Steve,brown,Paul 5

最新更新