使用csv列作为函数参数



csv

name;subnet
name_a;192.168.111.0/24
name_b;192.168.168.0/24
name_c;192.168.29.0/24

我试图通过将列值传递给函数参数,为csv中的每一列运行一个带有for循环的函数。我该怎么做?

我不确定是否必须将csv内容导入列表、dict,或者是否可以直接使用列作为函数参数。

with open(csv_address_objects, mode='r', encoding='utf-8-sig') as csv_file:
csv_reader = csv.DictReader(csv_file, delimiter=';')
list_of_csv = dict(csv_reader)

试试这个:

import pandas as pd
data = pd.read_csv("test.csv", sep=";")
names = data["name"].to_list()
subnets = data["subnet"].to_list()
def process_data(names, subnets):
for name, subnet in zip(names, subnets):
print(f"{name}: {subnet}")
if __name__ == "__main__":
process_data(names, subnets)

您使用的代码是正确的。

对于CSV模块,reader和DictReader在";行";正在读取的CSV。在DictReader的情况下,一行是一个键入CSV列名(标题)的dict,如:

{"name": "name_a", "subnet": "192.168.111.0/24"}

因此,要迭代您的行并使用这两个列值传递给您的函数,您只需要添加以下内容:

import csv
def my_func(name, subnet):
print(f'doing something with name="{name}" and subnet="{subnet}"')
with open("input.csv", mode="r", encoding="utf-8-sig") as csv_file:
csv_reader = csv.DictReader(csv_file, delimiter=";")
for row in csv_reader:
my_func(row["name"], row["subnet"])
# or pass the dict's key-value pairs with `**` syntax
# my_func(**row)

当我对照你的样本CSV运行时,我得到:

doing something with name="name_a" and subnet="192.168.111.0/24"
doing something with name="name_b" and subnet="192.168.168.0/24"
doing something with name="name_c" and subnet="192.168.29.0/24"

您可能应该使用pandas:

import pandas as pd
data = pd.read_csv(csv_address_objects, sep = ';')

然后,您可以轻松访问列、行或任何特定值。请参阅:https://pandas.pydata.org/docs/getting_started/intro_tutorials/03_subset_data.html

最新更新